美文网首页工作生活
android讲义一开发自定义view(1)

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

作者: 奥利奥龙卷风 | 来源:发表于2019-07-03 23:10 被阅读0次

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

    相关文章

      网友评论

        本文标题:android讲义一开发自定义view(1)

        本文链接:https://www.haomeiwen.com/subject/kophhctx.html