安卓开发自定义View

时间:2020-12-22 16:44:22

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布局文件,其代码修改为:

<?xml version ="1.0" encoding = "utf - 8"?>

<FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"

android:layout_width = "match_parent"

android:layout_height = "match_parent"

android:background = "@drawable/bj"

android:id = "@+id/mylayout">

</FrameLayout>

(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,一起交流和学习