欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

跟随手指的小球_自定义UI组件+onDraw+invalidate+Touch监听

程序员文章站 2022-06-09 10:28:04
...

注意自定义的类要和MainActivity放在同一文件夹下才能在其中使用
super指父类
Part1:自定义DrawView组件

public class DrawView extends View {
    public float currentX=40;
    public float currentY=40;

    public DrawView(Context context)
    {
        super(context);  
    }
    @Override
    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        //创建画笔
        Paint p=new Paint();
        p.setColor(Color.RED);
        canvas.drawCircle(currentX,currentY,15,p);
    }
}

Part2:MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LinearLayout layout_main=(LinearLayout)findViewById(R.id.main_linear);
        final DrawView drawView=new DrawView(this);
        drawView.setMinimumWidth(300);
        drawView.setMinimumHeight(500);
        drawView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                drawView.currentX=event.getX();
                drawView.currentY=event.getY();
                drawView.invalidate();
                return true;
            }
        });
        layout_main.addView(drawView);
    }
}

invalidate()是用来刷新View的,必须在UI线程中进行工作
在修改某个View的显示时,调用invalidate()才能看到重新绘制的界面
invalidate()是把旧的view从主UI线程队列中pop掉
本例中是不使用多线程和双缓冲的情况
只需在Activity中显式调用该方法,系统会自动调用View的onDraw方法