当前位置: 移动技术网 > IT编程>移动开发>Android > Android自定义View圆形和拖动圆跟随手指拖动

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

黄家佐,望江电视台,清洁打蜡

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

我在第一次自定义view圆遇到的小问题:

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

2.在布局里自定的view会提示编译 点击build编译一下就好了

这里写图片描述

下面开始写代码: 先是单纯的创建一个圆形 创建一个类继承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);
    //参数为圆的横坐标 ,纵坐标,半径,创建 
    //如果圆形出不来 说明你xml里定义的宽和高的空间不够大 这里是圆在屏幕的坐标位置 xml定义的是圆能够显示的区域 如果你定义的太小 圆的坐标又超过了这个区域 就会显示不出来 xml里定义宽和高充满屏幕就可以了  
    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);
    //参数为圆的横坐标 ,纵坐标,半径,创建
    //如果圆形出不来 说明你xml里定义的宽和高的空间不够大 这里是圆在屏幕的坐标位置 xml定义的是圆能够显示的区域 如果你定义的太小 圆的坐标又超过了这个区域 就会显示不出来 xml里定义宽和高充满屏幕就可以了 
    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;

  }
}

这样圆就跟随手指的活动而动了,快试试吧。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网