欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-19 19:42:46
单纯的自定义一个圆非常简单 只需要几步就完成 拖动圆添加实现触摸事件即可 我在第一次自定义view圆遇到的几个bug: 1.拖动圆的话在xml里面设置的自定义圆的宽和...

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

我在第一次自定义view圆遇到的几个bug:

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

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

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圆形和拖动圆、跟随手指拖动效果,希望对大家有所帮助

上一篇:

下一篇: