虽然Android提供了很多继承了View类的UI组件,但是在实际开发中,还会出现不足以满足程序需要的情况。这时,用户就可以通过View类来开发自己的组件。
下面我们就来自定义View来实现一个小游戏--手指兔子。
1、首先自定义一个RabbitView继承于View类,病重写构造方法,然后根据需要重写相应的方法
public class RabbitView extends View { public float bitmapX;//小兔子显示位置的X坐标 public float bitmapY;//小兔子显式位置的Y坐标
//重写构造方法 public RabbitView(Context context) { super(context);
//设置小兔子默认显式的位置XY坐标 bitmapX = 100; bitmapY = 100; }
//重写onDraw方法 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);
//创建并实例化Paint对象
Paint paint = new Paint();
//根据图片生成位图对象 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.rabbit);
//绘制小兔子 canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint);
//判断图片是否回收
if(bitmap.isRecycled()){
//强制回收图片 bitmap.recycle(); } } }
2、在MainActivity中的onCreate()方法中作如下处理:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//获得布局 RelativeLayout relativeLayout = (RelativeLayout) findViewById(activity_main);
//创建并实例化RabbitView类 final RabbitView rabbit = new RabbitView(this);//为小兔子添加触摸事件监听器 rabbit.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //设置小兔子显示位置的XY坐标 rabbit.bitmapX = event.getX(); rabbit.bitmapY = event.getY();//重绘rabbit组件 rabbit.invalidate(); return true; } });//将rabbit添加到布局中 relativeLayout.addView(rabbit); } }接下来就可以玩一玩儿啦,小兔子会随着你的手指的拖动轨迹而移动的,快去试试吧~