创建一个跟随手指移动的控件
第一步:重写控件
- 新建一个类,继承自View
- 定义两个字段,表示x,y在屏幕上的坐标
- 在构造函数上给x,y赋值
- 重写onDraw方法
- 创建并实例化Paint对象
- 根据图片生成位图对象
- 绘制图像
- 回收图像
public float bitmapX,bitmapY;
public RabbitView(Context context)
{
super(context);
bitmapX = 290;
bitmapY = 160;
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Paint paint=new Paint(); //创建并实例化Paint对象
Bitmap bitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.ic_launcher_round);
//根据图片生成图片对象
canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint);
//绘制要移动的图片对象
if (bitmap.isRecycled())//判断图像是否回收
{
bitmap.recycle();//强制回收图片
}
}
第二歩:引用控件并设置移动事件
- 获取布局
- 创建并实例化自定义控件类
- 为控件添加触摸监听设备
- 在监听事件方法里设置控件x、y的位置并重绘控件
- 将控件实例添加到布局中
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout=findViewById(R.id.myLayout);
final RabbitView rabbit=new RabbitView(this);
rabbit.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
rabbit.bitmapY=motionEvent.getY();
rabbit.bitmapX=motionEvent.getX();
rabbit.invalidate();//重绘
return true;
}
});
frameLayout.addView(rabbit);
}