跟随手指的小球_自定义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方法
上一篇: 跟随手指的小球
下一篇: 盛大游戏2018秋招Java笔试题