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

Android自定义View实现拖拽效果

程序员文章站 2023-11-14 14:26:34
腾讯qq有那种红点拖动效果,今天就来实现一个简单的自定义view拖动效果,再回到原处,并非完全仿qq红点拖动。 先来看一下效果图 简单说一下实现步骤 1.创建一个...

腾讯qq有那种红点拖动效果,今天就来实现一个简单的自定义view拖动效果,再回到原处,并非完全仿qq红点拖动。

先来看一下效果图

Android自定义View实现拖拽效果

简单说一下实现步骤

1.创建一个类继承view

2.绘制出一个小球

3.重写ontouchevent,来根据手指放下,移动,抬起,来控制小球

4.直接在布局中引用 

先贴一张图看下view的坐标系

Android自定义View实现拖拽效果

下面就贴一下代码,最后会给出源码

public class customview extends view {
 
 private int lastx;
 private int lasty;
 private int startleft;
 private int startright;
 private int starttop;
 private int startbottom;
 
 public customview(context context, @nullable attributeset attrs) {
 super(context, attrs);
 }
 
 @override
 protected void ondraw(canvas canvas) {
 super.ondraw(canvas);
 //画一个小球
 paint paint = new paint();
 paint.setstrokewidth(30);
 paint.setcolor(color.parsecolor("#ff0000"));
 paint.setantialias(true);
 paint.setstyle(paint.style.fill_and_stroke);
 canvas.drawcircle(getwidth()/2,getheight()/2,30,paint);
 }
 
 @override
 public boolean ontouchevent(motionevent event) {
 int action = event.getaction();
 //获取手机触摸的坐标
 int x = (int) event.getx();
 int y = (int) event.gety();
 switch (action){
 case motionevent.action_down://按下,获取小球初始的位置
 startleft = getleft();
 startright = getright();
 starttop = gettop();
 startbottom = getbottom();
 lastx = x;
 lasty = y;
 break;
 case motionevent.action_move://移动,小球跟随手指的移动
 int offsetx = x - lastx;
 int offsety = y - lasty;
 layout(getleft()+offsetx,gettop()+offsety,
  getright()+offsetx,getbottom()+offsety);
 break;
 case motionevent.action_up://当手指抬起时,回到小球初始的位置
 layout(startleft, starttop, startright, startbottom);
 break;
 }
 return true;
 }
}

直接在布局中引用该自定义view就可以,宽高给固定 

源码地址:android自定义view简单拖拽效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。