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

发布时间 - 2026-01-11 03:17:17    点击率:

单纯的自定义一个圆非常简单 只需要几步就完成 拖动圆添加实现触摸事件即可

我在第一次自定义View圆遇到的几个Bug:

1.拖动圆的话在xml里面设置的自定义圆的宽和高是它能活动的空间的大小 不是圆控件的大小 如果你定义了100dp 拖动它的时候超过100dp这个距离这个圆就会看不见 就像下面这样 如果想活动于整个屏幕直接给宽和高match_parent属性就好了

2.我在定义充满属性match_parent的时候运行会报错,什么方法都用了就是不行,耐心等待过一会就好了…有可能是studio没来得及编译过来

下面开始写代码: 先是单纯的创建一个圆形 创建一个类继承View 实现onDraw方法

public class CustomView extends View {
 //创建point对象 参数为x坐标和y坐标
 private PointF point = new PointF(100, 100);
 public CustomView(Context context) {
  super(context);
 }
 public CustomView(Context context, @Nullable AttributeSet attrs) {
  super(context, attrs);
 }
 public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  //参数为圆的横坐标 ,纵坐标,半径,创建
  canvas.drawCircle(point.x,point.y, 50, new Paint());
 }
}

XML里、自己定义的view类的名字:

<ydtx.bwie.com.xiangmu_project02.CustomView
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

一个圆就这样创建好了 直接运行就可以了 ManActivity里什么也不用改

@Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

下面是添加拖动圆的功能 非常简单 实现触摸监听即可 代码非常少 如下:

public class CustomView extends View {
 //创建point对象 参数为x坐标和y坐标
 private PointF point = new PointF(100, 100);
 public CustomView(Context context) {
  super(context);
 }
 public CustomView(Context context, @Nullable AttributeSet attrs) {
  super(context, attrs);
 }
 public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  //参数为圆的横坐标 ,纵坐标,半径,创建 
  canvas.drawCircle(point.x,point.y, 50, new Paint());
 }
 //触摸事件
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  //获得触摸事件
  switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN:
    break;
   //ACTION_MOVE不要设置break,否则圆形不会跟随手指活动 只会手指松开屏幕的时候圆形直接到了屏幕停止的位置
   case MotionEvent.ACTION_MOVE:
   case MotionEvent.ACTION_UP:
    //获取手指触摸位置的x坐标
    point.x = event.getX();
    //获取手指触摸位置的y坐标
    point.y = event.getY();
    //启动
    postInvalidate();
    break;
  }
  return true;
 }
}

总结

以上所述是小编给大家介绍的Android自定义View圆形和拖动圆、跟随手指拖动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # 自定义view  # 圆形  # 拖动  # Android实现ImageView图片缩放和拖动  # Android实现跟随手指拖动并自动贴边的View样式(实例demo)  # Android自定义View实现拖动选择按钮  # Android实现单页面浮层可拖动view的一种方法  # Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码  # Android开发实现可拖动排序的ListView功能【附源码下载】  # Android DragImageView实现下拉拖动图片放大效果  # Android RecyclerView滑动删除和拖动排序  # Android ViewDragHelper仿淘宝拖动加载效果  # android实现可拖动的浮动view  # 自定义  # 我在  # 创建一个  # 小编  # 就好了  # 几个  # 就会  # 如果你  # 好了  # 就像  # 有可能  # 在此  # 只会  # 用了  # 给大家  # 只需要  # 几步  # 报错  # 它能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 公司门户网站制作流程,华为官网怎么做?  Laravel如何处理CORS跨域请求?(配置示例)  Laravel如何处理表单验证?(Requests代码示例)  如何获取免费开源的自助建站系统源码?  如何在建站宝盒中设置产品搜索功能?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  文字头像制作网站推荐软件,醒图能自动配文字吗?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何使用Blade组件和插槽?(Component代码示例)  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Python结构化数据采集_字段抽取解析【教程】  再谈Python中的字符串与字符编码(推荐)  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  LinuxShell函数封装方法_脚本复用设计思路【教程】  Python正则表达式进阶教程_复杂匹配与分组替换解析  网站建设要注意的标准 促进网站用户好感度!  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  nginx修改上传文件大小限制的方法  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  C++用Dijkstra(迪杰斯特拉)算法求最短路径  WordPress 子目录安装中正确处理脚本路径的完整指南  如何在建站之星绑定自定义域名?  如何在阿里云完成域名注册与建站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  JavaScript如何实现路由_前端路由原理是什么  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  如何快速搭建高效WAP手机网站吸引移动用户?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在云虚拟主机上快速搭建个人网站?  如何确认建站备案号应放置的具体位置?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  如何在新浪SAE免费搭建个人博客?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel如何处理异常和错误?(Handler示例)  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  EditPlus中的正则表达式 实战(2)  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  高端建站如何打造兼具美学与转化的品牌官网?  如何用PHP工具快速搭建高效网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?