在android开发中我们有时候需要开发自定义的View,因此本文主要介绍开发自定义View的方法,希望对大家有用。
在android中,所有的UI界面都是有View类和ViewGroup类及其子类组成的,其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器,其本身也是View类的子类,下面是View类的层次结构:
在实际开发中,还会出现不足以满足程序的情况,虽然android提供很多继承View 类来开发自己的组件,开发自定义组件大致分为3个步骤:
1):创建一个继承android.view.View类的View类,并重写构造方法;
2):根据需要重写相应的方法
3):在项目的活动中,创建并实例化自定义View类,并将其添加到布局管理器中
1)在新建项目的res/layout目录下修改布局文件main.xml,将默认的组件删除,添加一个帧布局管理器FrameLayout,并且设置其背景和id 属性。
代码如下:
<?xml veision="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/background"
android:id="@+id/mylayout"
>
2)创建一个名称为AppleView的java类,该类继承自android.view.View类,重写带一个参数的ContextDraw()方法。其中,在构造方法中设置apple的默认显示位置,在onDraw()方法中根据图片绘制apple。AppleView类的代码如下:
public class AppleView extends View {
public float bitmapX;
public float bitmapY;
public AppleView(Context context){
super(context);
bitmapX=750;
bitmaoY=500;
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint paint = new Paint();//创建并实例化Paint对象
Bitmap bitmap = BitmapFactory.decodeResource(this.getResource(),R.drawable.rabbit); //根据图片生成位图对象
canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint);
if(bitmap.isRecycled){//判断图片是否收回
bitmap.recycle(); //强制收回该图片
}
}
}
3)在主活动的onCreate()方法中,首先获取帧布局管理器并实例化apple对象,然后为apple添加触摸事件监听器,再重写触摸事件中设置apple的显示位置apple组件,最后将apple添加到布局管理器中。
FrameLayout frameLayout = (Framelayout)findViewById(R.id.mylayout);//获取帧布局管理器
final AppleView apple = new AppleView(MainActivity.this);
//创建并实例化AppleView组件
apple.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v,MotionEvent event){
apple.bitmapX=event.getX();
apple.bitmapY=event.getY();
apple.invalidate(); //重绘apple组件
return true;
}
} );
frameLayout.addView(rabbit); //将apple添加到布局管理器中
按步骤便可得到一个随手指的拖动轨迹移动的苹果。