开发自定义的View

在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添加到布局管理器中
按步骤便可得到一个随手指的拖动轨迹移动的苹果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值