android讲义一开发自定义view(1)

基于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;

    }

}

(二)然后放在布局文件中即可

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>



android讲义一开发自定义view(1)_第1张图片

你可能感兴趣的:(android讲义一开发自定义view(1))