• Android canvas+paint绘制一个可以指定位置移动的小球(含触屏响应)


    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <EditText
            android:id="@+id/txt_1"
            android:layout_width="200dp"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/but_1"
            android:text="确认"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
            <com.android.canvstest.TestView
                android:layout_height="wrap_content"
                android:id="@+id/textview1"
                android:layout_width="wrap_content"/>
    </LinearLayout>
    package com.android.canvstest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final TestView testView = findViewById(R.id.textview1);
            Button button = findViewById(R.id.but_1);
            final EditText editText = findViewById(R.id.txt_1);
            testView.setXY(100,100);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int x=100;
                    x = Integer.parseInt(editText.getText().toString());
                    testView.setXY(x,100);
                    testView.invalidate();
                }
            });
        }
    
    }

    自定义TextView

    package com.android.canvstest;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.view.View;
    
    import androidx.annotation.Nullable;
    
    public class TestView extends View {
    
        int x,y;
    
        public TestView(Context context, @Nullable AttributeSet attrs) {    //必须使用AttributeSet接口做对象的参数
            super(context, attrs);
        }
    
    
        void setXY(int x1,int y1){
            x=x1;
            y=y1;
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawColor(Color.BLUE);
    
            Paint paint=new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.GREEN);
            paint.setStyle(Paint.Style.FILL);
    
            canvas.drawCircle(x,y,50,paint);
            paint.setColor(Color.RED);
            canvas.drawCircle(x,y,10,paint);
    
        }
    }

     后面我又写了一下触屏移动操作(只需要改动MainActivity):

    package com.android.canvstest;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;


    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TestView testView = findViewById(R.id.textview1);
    Button button = findViewById(R.id.but_1);
    final EditText editText = findViewById(R.id.txt_1);
    testView.setXY(100, 100);

    testView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    int x,y;
    x = (int) event.getX();
    y = (int) event.getY();
    if (event.getAction() == MotionEvent.ACTION_DOWN){
    testView.setXY(x,y);
    testView.invalidate();
    return true;
    }
    else if (event.getAction() == MotionEvent.ACTION_MOVE){
    testView.setXY(x,y);
    testView.invalidate();
    return true;
    }
    return testView.onTouchEvent(event);
    }
    });
    button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    int x=100;
    x = Integer.parseInt(editText.getText().toString());
    testView.setXY(x,100);
    testView.invalidate();
    }
    });
    }
    }
  • 相关阅读:
    Linux 分区注意事项
    wamp2.4-- 为WAMP中的mysql设置密码密码
    转multicast vs broadcast
    转 生成 HTMLTestRunner 测试报告
    Eclipse和PyDev搭建完美Python开发环境(Windows篇)
    转 深入解析浏览器的幕后工作原理
    selenium + python 怎样才能滚到页面的底部?
    Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
    Java中使用poi导入、导出Excel
    eclipse下的tomcat内存设置大小
  • 原文地址:https://www.cnblogs.com/xiaowangdatie/p/14126675.html
Copyright © 2020-2023  润新知