【Android系统】自定制View

学习Android有一段时间了,真正开始也就是今年的3月,之前都是零碎的看一点,没什么可以做也就搁浅了,现在又捡起来就要坚持下去!

今天记录一下学习到的知识点吧自定制View,Android系统提供了较比多的View组件来帮助开发者完成APP的界面,如Button,ProgressBar等。

在XML中使用自定义的View

要在XML中使用自定义的View需要使用全路径(即包名+类名)

<com.example.MyView 
    android:id="@+id/myview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

xml中的视图只有类名,系统会去android.view和android.widget包下找该类,如果没有找到将抛出异常,应用无法正常运行。因此自定义View需要使用全路径.

Inflator类是根据xml中的资源生成相应的View。分析一下源码应该会更加清楚

继承View类

自定义类可以根据需求可以选择直接继承Button这类可直接使用的View类,在此基础上再做些自已改动。当然也可以直接继承View类,View类就像是一块白板一样,需要自己去画出界面内容。

public class MyView externed View {
	public MyView(Context context) {
		this(context, null);
	}
	
	public MyView(Context context AttributeSet attrs) {
		super(context, attrs);
	}
}

从布局文件中实例化View时将收到AttributeSet对象,该对象包含了xml文件中指定的View的属性值

重载onDraw(Canvas canvas)函数

onDraw()函数中将呈现出View的内容,如果当前View包含子View,在该函数中也调用子View的onDraw()函数

在绘制视图最重要的两个对象是:

  1. Canvas:具体所有的绘制操作,决定绘制位置和图形
  2. Paint:该类决定如何进行绘制,指定了绘制的图形特征
   Paint paint = new Paint();
   paint.setColor(Color.Red); // 设置画笔为红色
   canvas.drawRect(0, 0, 100, 100, paint) // 绘制矩形(0,0),(100, 100)

重载onTouchEvent() 响应触屏事件,该函数参数为MotionEvent,该类描述了事件的位置和动作

    public void onTouchEvent(MotionEvent event) {
	    PointF p = new PointF(event.getX(), event.getY());
	    switch(event.getAction()) {
		    case ACTION_DOWN:   // 按下屏幕
		    case ACTION_MOVE:   // 在屏幕上移动
		    case ACTION_UP:     // 离开屏幕
		    case ACTION_CANCEL: // 父视图拦截了触摸事件
	    }
	    return true;
    }

onTouchEvent()返回true表示该事件已处理, 将不再向子View传递;返回false,当前事件将传递给子View

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值