1.自定义View
虽然Android提供了很多继承了View类的UI组件,但是在实际开发时,还会出现不足以满足程序需要的情况。这时用户就可以通过继承View类来开发自己的组件。开发自定义View组件的主要步骤如下:
(1)创建一个继承android.view.View类的View类,并且重写构造方法。
(2)根据需要重写相应的方法。
在代码中右击,弹出的快捷菜单中选择“代码/覆盖/实现方法”选项,将打开一个可以选择要覆盖或者要实现的方法的对话框,在该对话框中显示了可以呗重写的方法。只需要选中“被重写的方法”的选框,并单击“确定”按钮,Eclipse将自动重写指定的方法。一般情况下,不需要重写全部方法。
(3)在项目的活动中,创建并实例化自定义View类,并将其添加到布局管理器中。
2.经典案例
下面为大家通过一个实例来演示怎样开发自定义View类。
【例】自定义View组件实现跟随手指动的猫。
(1)在Eclipse中创建Android应用项目,命名为cat_View。
(2)打开res\layout目录下的main.xml布局文件,其代码修改为:
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "@drawable/bj"
android:id = "@+id/mylayout">
(3)创建一个名为 CatView的java类,该类继承android.view.View类,重写带一个参数Context的构造方法和onDraw()方法。其中,在构造方法中设置小猫咪的默认显示位置,在onDraw()方法中根据图片回执小猫咪,其代码为:
public class CatView extends View {
public float bitmapX;//小猫咪显示位置的X坐标
public float bitmapY;//小猫咪显示位置的Y坐标
public CatView(Context context) {
super(context);
bitmapX = 750;//默认小猫咪的显示位置的X轴
bitmapY = 500;//默认小猫咪的显示位置的Y坐标
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();//创建并实例化paint的对象
Bitmap bitmap = BitmapFactory.decodeResource(this.getResource(),R.drawable.cat);//根据图片生成位图对象
canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint);//绘制小猫咪
if (bitmap.isRecycled()){//判断图片是否回收
bitmap.recycled();//强制回收图片
}
}
}
(4)打开主活动文件MainActivity,它的onCreate()方法中,首先获取帧布局管理器并实例化小猫咪对象cat。接着为cat添加触摸事件监听器,在重写的触摸事件中设置cat的显示位置并重绘cat组件,最后将cat添加到帧布局管理器中,其代码为:
public class MainActivity extends Activity {
//第一次调用Activity
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.main);
//获取帧布局管理器
Framelayout framelayout = (FrameLayout)findViewById(R.id.mylayout);
//创建并实例化CatView类
final CatView cat = new CatView (MainActivity.this);
//为小猫咪添加触摸事件监听
cat.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v,MotionEvent event){
cat.bitmapX = event.getX();//小猫咪显示位置的X坐标
cat.bitmapY = event.getY();//小猫咪显示位置的Y坐标
cat.invalidate();//重绘 cat 组件
return true;
}
});
frameLayout.addView(cat);//将cat添加到布局管理器中
}
运行程序,当用鼠标在屏幕上拖拽时,小猫咪将跟着鼠标的拖拽轨迹移动。
欢迎所有的朋友加QQ群:364595326,一起交流和学习