自定义View,绘制一个圆形,并可以单击拖动

Android自定义View——从零开始实现圆形进度条 以前老是用别人造的轮子,知其然不知其所以然,有时看懂了别人写的过多几个月又忘了,遂来开个坑把一步步实现和思路写下来,弄成一个系列。本篇只要讲的是Android自定义圆形进度条 阅读详情

自定义一个圆形,并能单击拖动

            定义一个类继承View,实现构造器方法

          绘制圆形,重新onDraw方法,使用其参数canvas调用drawCircle,并添其必须参数即可

          使绘制的图形可以拖动,要重写其onTouchEvent方法,并对其事件状态进行操作,具体下面代码有详细操作


public class MyCircleView extends View {
    //画笔
    private Paint mPaint;
    //圆的半径
    private float mRadius = 50f;
    //圆的圆心的x坐标
    private float pointX = mRadius;
    //圆的圆心的Y坐标
    private float pointY = mRadius;

    //控制是否可以移动的变量 true的时候可以移动
    private boolean moveable;

    public MyCircleView(Context context) {
        super(context);
    }

    //自定义veiw在布局中使用,必须实现的一个构造器
    public MyCircleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        //构造一个paint
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        //设置一个抗锯齿
        mPaint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //根据圆心的坐标来绘制圆的位置的,而圆心的坐标,我们触摸屏幕的时候被我们修改了
        canvas.drawCircle(pointX,pointY,mRadius,mPaint);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //手指触摸的x坐标
        float touchX;
        //手指触摸的y坐标
        float touchY;
        //event.getAction()判断事件的类型
        switch (event.getAction()){
            //按下的事件
            case MotionEvent.ACTION_DOWN:
                touchX = event.getX();
                touchY = event.getY();
                if (touchX > pointX - mRadius && touchX < pointX + mRadius && touchY > pointY - mRadius && touchY < pointY + mRadius){
                    moveable=true;
                    Toast.makeText(getContext(), "我按下了", Toast.LENGTH_LONG).show();
                }else{
                    moveable=false;
                }
                break;
            //移动的事件
            case MotionEvent.ACTION_MOVE:
                if (moveable) {
                    //重新设置一下圆心的位置, 把我们圆心的位置(pointX,pointY)设置成
                    // 当前触摸的位置(event.getX(),event.getY())
                    pointX = event.getX();
                    pointY = event.getY();

                    //去重新绘制, 会重新走onDraw()方法
                    invalidate();
                }
                break;
            //抬起的事件
            case MotionEvent.ACTION_UP:
                break;
        }
        return true;
    }
}

         定义好类之后,需在xml中引用,如下:包名+类名

<com.hgz.test.test.MyCircleView
    android:id="@+id/circle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ></com.hgz.test.test.MyCircleView>

Android自定义View:实现可拖动圆形进度条 自定义View是Android开发中一个非常重要的概念,它赋予了开发者强大的能力来创建独特且具有高度定制性的用户界面元素。通过继承已有的View类,开发者可以实现新的功能,并在应用中提供一致的用户体验。在自定义View的开发过程中,功能性扩展和自定义属性的设计是至关重要的。它们不仅提高了View的灵活性和可重用性,还增强了用户的体验。本章将深入探讨自定义属性的意义和实现方法,并展示如何扩展进度条的功能。 阅读详情

相关推荐

c# 绘制可拖动可平移图形

C# 实现鼠标拖动绘制线段、矩形,所绘图形支持拖拽,分享给有需要的朋友。

C# Gmap.Net 以某点为圆心,指定半径绘制圆,并实现圆心闪烁

简述 关于Gmap,如果你不是很熟悉,可以通过以下几篇文章来了解,这里就不多介绍了。需注意一点,地图上的坐标是指(经度, 纬度)--> (y, x)-->(longitude, latitude),且中国地区的经纬度,经度大,纬度。 GMap.NET 使用教程【1】 GMap.NET 使用教程【2】 GMap.NET 使用教程【3】 流程 求圆点四周,距离圆点距离为指定...

qq_27278957的博客 5642

anroid使用surfaceView画不停移动的圆形

anroid使用surfaceView画不停移动的圆形,使用线程在canvas中画圆形,并且改变其xy.

Android 自定义view 入门 案例

9.最后在新建一个页面:ThreeActivity, 并在AndroidManifest.xml,设置为启动页面。创建完成后,在xml添加自定义view:activity_three.xml。第一个是逻辑代码,第二个是布局,第三个是view需要使用的属性(通过这种方式创建属性,多次创建可能造成一些变量重复定义。8.更新自定义布局:sample_super_circle_view.xml。sample_super_circle_view.xml布局源码。3.输入自定义名称,选择开发语言。11.最后运行即可。

LlanyW的专栏 1220

C#自定义圆形控件 可缩放和移动

C#开发的自定义空间,圆形的图标,可以随鼠标拖动,放大和缩小,有2个版本,不记得哪个好用了,用的时候,在VS的工具箱右击——选项——选择这个Dll,可以添加上。试一试吧

安卓自定义View基础-绘制点、线、矩形、圆形等

安卓自定义View基础-绘制点、线、矩形、圆形等详情查看http://blog.youkuaiyun.com/z1353095373/article/details/71601293

Android自定义View之绘制圆形头像

前言 做APP应用开发的时候,用户头像肯定是必不可少的,但是90%以上的需求头像都是圆形的。那么,如何通过自定义View的方式实现圆形头像呢,那么,本片博文会告诉你不仅仅是实现过程。一定会有意想不到的收获哦! 最终效果 国际惯例,我们先来看最终实现的效果图 自定义RoundImageView继承自ImageView public class RoundImageView ext...

黄林晴 5801

微信自动化进阶:Python识别特定消息并自动回复(基于win32api控件操作)

本文详细介绍了如何使用Python和win32api实现微信消息的智能监控与自动回复。通过精准识别聊天记录中的特定关键词,结合多级匹配策略和性能优化技巧,构建稳定高效的自动化回复系统,适用于企业客服、个人助手等场景。

weixin_42663213的博客 441

Android 自定义View之圆形进度条

需求是不停的,会有这些需求:可指定画笔(宽度、颜色等)、可指定动画时长等。这些可以通过创建 Java 接口来设置,但我要学自定义View,就要用attr。未完待续~~Android Canvas的drawText()和文字居中方案。

weixin_44021334的博客 6223

从仿真到实战:PMOS缓启动与栅极泄放电路的优化设计

本文深入探讨了PMOS缓启动与栅极泄放电路的优化设计,通过立创EDA仿真和实物调试,解决了关断速度慢和耐压问题。文章详细介绍了电路改进方案和低功耗优化技巧,为工程师提供了实用的工程实践建议,帮助提升电源开关电路的性能和可靠性。

weixin_28721917的博客 258

合宙ESP32C3实战:MPU6500六轴传感器数据读取与校准全解析

本文详细解析了如何使用合宙ESP32C3开发板读取和校准MPU6500六轴姿态传感器数据。从硬件接线、开发环境搭建到核心代码解析,提供了全面的实战指南,帮助开发者快速掌握传感器配置与数据处理技巧,适用于姿态控制、运动检测等应用场景。

weixin_27066963的博客 404

android 圆形拖动条,Android自定义View圆形和拖动圆、跟随手指拖动效果

单纯的自定义一个圆非常简单 只需要几步就完成 拖动圆添加实现触摸事件即可我在第一次自定义View圆遇到的几个Bug:1.拖动圆的话在xml里面设置的自定义圆的宽和高是它能活动的空间的大小 不是圆控件的大小 如果你定义了100dp 拖动它的时候超过100dp这个距离这个圆就会看不见 就像下面这样 如果想活动于整个屏幕直接给宽和高match_parent属性就好了2.我在定义充满属性match_par...

weixin_27061475的博客 459

H3C BGP联盟实验

bgp,bgp联盟,bgp公认团体属性,

一只懒羊羊 968

Android:自定义View实现绚丽的圆形进度条

Android:自定义View实现绚丽的圆形进度条

books1958的专栏 8706

调节桌面图标大小的方法(编程)

如果你对其他操作系统或编程语言有类似的需求,可以根据具体的情况进行相应的调整和搜索相关的库和方法。在编程中,我们可以使用各种桌面应用程序来调节桌面图标的大小。库提供的函数,我们获取了桌面图标的窗口句柄,并使用Windows消息发送方式设置图标的大小。你可以根据自己的需求修改代码中的图标大小值,并在运行代码后观察桌面图标的变化。函数并传入所需的图标大小,这里设置为48x48像素。首先,我们需要使用Python的第三现的方法。首先,我们需要使用Python的第三方库。首先,我们需要使用实现的方法。

CyberFlare的博客 438

S7-1200中OB100和OB20中断使用方法及示例程序说明(图文)

S7-1200中OB100和OB20中断使用方法及示例程序说明(图文)

Robot_PLC_HMI_Automation 8583

Android自定义View绘制圆形

自定义View绘画一个圆形 实现步骤: 步骤一:   创建一个类circle继承View public class cicle extends View { // 定义画笔 Paint paint; public cicle(Context context, @Nullable AttributeSet att...

alex_wen2014的博客 1104

YOLOv8改进,MobileNetV3轻量化架构改进特征提取网络,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。本文开始探讨了自动化搜索算法与网络设计如何协同工作,以利用互补方法来提升整体技术水平。通过这一过程,创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用场景。这些模型随后被适配并应用于目标检测和语义分割任务。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3835
上一篇: 一个工程跳到另一个工程
下一篇: 日夜间模式切换
SuperMonsterH
博客等级 码龄9年 11粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值