美文网首页
Android 自定义View

Android 自定义View

作者: gaookey | 来源:发表于2022-02-11 21:58 被阅读0次
    public class DrawView extends View {
    
        // 构造器:重写构造器是定制View的最基本方式,当java或Kotlin代码创建一个View实例,或根据xml布局文件加载并构建界面时将需要调用该构造器。
        public DrawView(Context context) {
            super(context);
        }
    
        // 这是一个回调方法,当应用从xml布局文件加载该组件并利用它来构建界面之后,该方法将会被回调。
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
        }
    
        // 调用该方法来检测View组件及其所包含的所有子组件的大小。 
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    
        // 当该组件需要分配其子组件的位置、大小时,该方法就会被回调。
        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            super.onLayout(changed, left, top, right, bottom);
        }
    
        // 当该组件的大小被改变时回调该方法。
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
        }
    
        // 当该组件将要绘制它的内容时回调该方法。
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
        }
    
        // 当某个键被按下时触发该方法。
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            return super.onKeyDown(keyCode, event);
        }
    
        // 当松开某个键时触发该方法
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            return super.onKeyUp(keyCode, event);
        }
    
        // 当发生轨迹球时间时触发该方法
        @Override
        public boolean onTrackballEvent(MotionEvent event) {
            return super.onTrackballEvent(event);
        }
    
        // 当发生触摸屏事件时触发该方法
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            return super.onTouchEvent(event);
        }
    
        // 当该组件焦点发生改变时出发该方法
        @Override
        protected void onFocusChanged(boolean gainFocus, int direction, @Nullable Rect previouslyFocusedRect) {
            super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
        }
    
        // 当包含该组件的窗口失去或得到焦点时触发该方法
        @Override
        public void onWindowFocusChanged(boolean hasWindowFocus) {
            super.onWindowFocusChanged(hasWindowFocus);
        }
    
        // 当把该组件放入某个窗口中时触发该方法
        @Override
        protected void onAttachedToWindow() {
            super.onAttachedToWindow();
        }
    
        // 当把该组件从某个窗口中分离时触发该方法
        @Override
        protected void onDetachedFromWindow() {
            super.onDetachedFromWindow();
        }
    
        // 当包含该组件的窗口的可见性发生改变时出发该方法
        @Override
        protected void onWindowVisibilityChanged(int visibility) {
            super.onWindowVisibilityChanged(visibility);
        }
    }
    
    跟随手指的小球
    public class DrawView extends View {
    
        private float currentX = 50f;
        private float currentY = 50f;
    
        private Paint paint = new Paint();
    
        public DrawView(Context context) {
            super(context);
        }
    
        public DrawView(Context context, AttributeSet set) {
            super(context, set);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            paint.setColor(Color.RED);
            canvas.drawCircle(currentX, currentY, 15F, paint);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
    
            currentX = event.getX();
            currentY = event.getY();
    
            invalidate();
            return true;
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        tools:context=".MainActivity">
    
        <com.example.myapplication.DrawView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </LinearLayout>
    

    相关文章

      网友评论

          本文标题:Android 自定义View

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