基于AndroidUI组件的实现原理,开发者完全可以开发出项目定制的组件。当开发者打算派生自己的UI组件时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法。通常可以被用户重写的方法如下:
构造器:重写构造器是定制View的基本方式,当java代码创建一个View实例,或根据XML布局文件加载并构建界面时将需要调用该构造器。
onFinishInflate():这是有一个回调方法,当应用从XML布局文件加载该组件并利用它来构建界面之后,该方法将会被回调。
onMeasure(int,int):调用该方法来检测View组件及其所包含的所有子组件的大小。
onLayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小时,该方法就会被调用。
onSizeChanged(int,int,int,int):当该组件的大小被改变时回调该方法。
onDraw(Canvas):当组件将要绘制它的内容时回调该方法进行绘制
.......等一些其他的方法
例子:跟随手指滑动的小球:
(一)
package com.example.myandroiddemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawViewextends View {
public float currentx =40;
public float currenty =50;
//定义并创建画笔
Paintpaint =new Paint();
public DrawView(Context context) {
super(context);
}
public DrawView(Context context,@Nullable AttributeSet attrs) {
super(context, attrs);
}
public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//设置画笔颜色
paint.setColor(Color.RED);
//绘制一个小圆
canvas.drawCircle(currentx,currenty,15,paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//修改currentx、currenty两个属性
currentx = event.getX();
currenty = event.getY();
//通知当前组件重绘自己
invalidate();
//放回ture 表示该处理方法已经处理该事件
return true;
}
}
(二)然后放在布局文件中即可
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
网友评论