zoukankan      html  css  js  c++  java
  • Android 自定义组件随着手指自动画圆

    首先自定义一个View子类:

    package com.example.androidtest0.myView;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.View;
    
    public class DrawView extends View {
        public float currentX = 40;
        public float currentY = 50;
        //定义、并创建画笔
        Paint p = new Paint();
        public DrawView(Context context) {
            super(context);
        }
    
        public DrawView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            //设置画笔的颜色
            p.setColor(Color.RED);
            //绘制一个小球
            canvas.drawCircle(currentX, currentY, 15, p);
        }
        
        /**
         * 为该组件的触碰事件重写事件处理方法
         */
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            //修改currentX、currentY两个属性
            currentX = event.getX();
            currentY = event.getY();
            //通知当前组件重绘自己
            invalidate();
            return true;
        }
    }

    主界面XML:

    custom_layout.xml

    <pre name="code" class="java"><?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:id="@+id/root"
        android:orientation="vertical" >
    
    </LinearLayout>

    主activity文件如下:

    package com.example.androidtest0;
    
    import com.example.androidtest0.myView.DrawView;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.LinearLayout;
    
    public class CustomView extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.custom_layout);
        }
    }

    效果:

    除此之外:

    还可以用XML的方式:也是首先建一个View的子类,和上面一样。然后主界面XML如下:

    <?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:id="@+id/root"
        android:orientation="vertical" >
    
        <com.example.androidtest0.myView.DrawView 
            android:layout_width="match_parent" android:layout_height="match_parent"
            />
    </LinearLayout>

    主activity文件如下:

    package com.example.androidtest0;
    
    import com.example.androidtest0.myView.DrawView;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.LinearLayout;
    
    public class CustomView extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.custom_layout);
        }
    }
  • 相关阅读:
    设计模式的原则和法则
    GoF的23种设计模式分类和功能
    2020年智慧电力解决方案
    【转载】「黑科技」智能防疫消毒机器人 技术方案介绍-disinfection robot
    【转载】如何让电力巡检机器人项目落地
    30多张图来了解Keil5的使用
    [数学学习与代码]最小二乘法--多元线性方程求解
    MTK-LCM 屏幕使用fbconfig/PanelMaster来调试LCM驱动
    MTK 使用iptable 命令来完成网络路由(android WIFI/4G分享网络)
    MTK(android init.rc) 写一个开机启动的服务
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4308036.html
Copyright © 2011-2022 走看看