服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android自定义View实现拖拽效果

Android自定义View实现拖拽效果

2022-08-24 14:22zpf_ Android

这篇文章主要为大家详细介绍了Android自定义View实现拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

先来看一下效果图

Android自定义View实现拖拽效果

简单说一下实现步骤

1.创建一个类继承View

2.绘制出一个小球

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

4.直接在布局中引用 

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

Android自定义View实现拖拽效果

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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简单拖拽效果

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

原文链接:https://blog.csdn.net/qq1271396448/article/details/82784315

延伸 · 阅读

精彩推荐
  • AndroidAndroid计算器简单逻辑实现实例分享

    Android计算器简单逻辑实现实例分享

    这篇文章主要介绍了Android计算器简单逻辑实现实例,有需要的朋友可以参考一下...

    Android开发网11862021-02-22
  • AndroidAndroid画个时钟玩玩

    Android画个时钟玩玩

    这篇文章主要向大家介绍了Android画时钟的方法,内容很详细,分享了每一个制作步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    hellsam5972021-05-06
  • Androidandroid 如何获取MCC/MNC控制小区广播的开启

    android 如何获取MCC/MNC控制小区广播的开启

    获取MCC/MNC以便控制小区广播的开启下面针对于单卡、双卡,为大家详细介绍下具体的实现,感兴趣的朋友可以参考下哈...

    Android开发网7722021-01-22
  • AndroidAndroid支付宝支付设计开发

    Android支付宝支付设计开发

    这篇文章主要为大家详细介绍了Android支付宝支付设计开发,设计支付宝支付开发方案,感兴趣的小伙伴们可以参考一下...

    Android开发网12062021-06-09
  • AndroidAndroid反编译代码和防止反编译

    Android反编译代码和防止反编译

    这篇文章主要介绍了Android反编译代码和防止反编译的相关资料,需要的朋友可以参考下...

    Android开发网6762021-03-27
  • AndroidAndroid的Service应用程序组件基本编写方法

    Android的Service应用程序组件基本编写方法

    Service是一个android 系统中的应用程序组件,它跟Activity的级别差不多,但是他没有图形化界面,不能自己运行,只能后台运行,Service通常用来处理一些耗时比...

    Android教程网10142020-12-25
  • AndroidAndroid自定义ProgressDialog进度等待框

    Android自定义ProgressDialog进度等待框

    这篇文章主要介绍了Android自定义ProgressDialog进度等待框,通过本文大家可以尝试利用Android自定义ProgressDialog,文中示例代码介绍的非常详细,具有一定的参...

    无缘公子5352021-05-07
  • Androidandroid IPC之binder通信机制

    android IPC之binder通信机制

    Binder通信机制说来简单,但是在使用的过程的遇到了一些问题,最后终于解决了,现在晒出来和大家分享一下,希望可以帮助你们...

    Android教程网1962020-12-21