Android自定义View实现拖拽效果

 更新时间:2020年05月29日 08:57:53   作者:zpf_  
这篇文章主要为大家详细介绍了Android自定义View实现拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

先来看一下效果图

简单说一下实现步骤

1.创建一个类继承View

2.绘制出一个小球

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

4.直接在布局中引用 

先贴一张图看下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简单拖拽效果

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

相关文章

  • Android编程实现手机震动功能的方法

    Android编程实现手机震动功能的方法

    这篇文章主要介绍了Android编程实现手机震动功能的方法,结合实例形式分析了Android实现手机震动功能的核心代码与权限控制操作技巧,需要的朋友可以参考下
    2017-06-06
  • flutter 自定义card阴影效果及card使用

    flutter 自定义card阴影效果及card使用

    这篇文章主要介绍了flutter 自定义card阴影效果及card使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android 两个Fragment之间传递数据实例详解

    Android 两个Fragment之间传递数据实例详解

    这篇文章主要介绍了Android 两个Fragment之间传递数据实例详解的相关资料,这里附有实例代码,实现该功能,需要的朋友可以参考下
    2016-12-12
  • android命令行模拟输入事件(文字、按键、触摸等)

    android命令行模拟输入事件(文字、按键、触摸等)

    这篇文章主要给大家介绍了关于android命令行模拟输入事件,例如文字、按键、触摸等的相关资料,文中通过示例代码介绍的非常详细,对各位android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Android使用vcard文件的方法简单实例

    Android使用vcard文件的方法简单实例

    这篇文章主要介绍了Android使用vcard文件的方法,结合实例形式分析了Android针对vcard文件的打开、读取、写入等相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android 开机广播的使用及配置

    Android 开机广播的使用及配置

    在配置文件AndroidManifest.xml中向系统注册receiver,子节点 intent-filter表示接收
    2013-02-02
  • Android仿微信通讯录滑动快速定位功能

    Android仿微信通讯录滑动快速定位功能

    这篇文章主要介绍了Android仿微信通讯录滑动快速定位功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • Android开发学习笔记 浅谈WebView

    Android开发学习笔记 浅谈WebView

    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法
    2014-11-11
  • kotlin中的数据转换方法(示例详解)

    kotlin中的数据转换方法(示例详解)

    这篇文章介绍了Kotlin中将数字转换为字符串和字符串转换为数字的多种方法,包括使用`toString()`、字符串模板、格式化字符串、处理可空类型等,同时,也详细讲解了如何安全地进行字符串到数字的转换,并处理了不同进制和本地化格式的字符串转换,感兴趣的朋友一起看看吧
    2025-03-03
  • flutter实现底部不规则导航栏

    flutter实现底部不规则导航栏

    这篇文章主要为大家详细介绍了flutter实现底部不规则导航栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论