android 手指移动的动画,Android中View跟随手指滑动效果的实例代码_zetachow晓代~的博客-程序员秘密

技术标签: android 手指移动的动画  

Android中View跟随手指滑动效果的实例代码

发布时间:2020-09-21 08:03:14

来源:脚本之家

阅读:127

作者:meetings

本文讲述了Android中View跟随手指滑动效果的实例代码。分享给大家供大家参考,具体如下:

1、android View 主要6种滑动方法,分别是

layout()

offsetLeftAndRight()和offsetTopAndBottom()

LayoutParams

scrollBy()和 scrollTo()

Scroller

动画

2、实现效果图

4e08e7f21e1dbc5e8ce473124e3eb6dc.gif

3、自定义中使用layout()方法实习view的滑动

public class MoveView extends View {

private int lastX, lastY;

public MoveView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

}

public MoveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public MoveView(Context context) {

super(context);

}

public boolean onTouchEvent(MotionEvent event) {

int x = (int) event.getX();

int y = (int) event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

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);

}

return true;

}

}

2、offsetLeftAndRight()和offsetTopAndBottom()

public boolean onTouchEvent(MotionEvent event) {

int x = (int) event.getX();

int y = (int) event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

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);

offsetLeftAndRight(offsetX);

offsetTopAndBottom(offsetY);

}

return true;

}

3、LayoutParams 改变布局参数的方法:

public boolean onTouchEvent(MotionEvent event) {

int x = (int) event.getX();

int y = (int) event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

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);

// offsetLeftAndRight(offsetX);

// offsetTopAndBottom(offsetY);

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();

layoutParams.leftMargin = getLeft()+offsetX;

layoutParams.topMargin = getTop() +offsetY;

setLayoutParams(layoutParams);

}

return true;

}

4、当然使用动画 ,scrollBy()和 scrollTo()也可以使view滑动,不足的是使用scrollBy()和 scrollTo()滑动时,是瞬间完成的,用户体验不太好。

5、Scroller和 View的computeScroll() 结合使用,实现view平滑的移动

public class MoveView extends View {

private Scroller mScroller;

public MoveView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

mScroller = new Scroller(context);

}

public MoveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public MoveView(Context context) {

super(context);

}

//重写computeScroll方法

@Override

public void computeScroll() { //view在onDraw的时候会调用此方法

super.computeScroll();

if (mScroller.computeScrollOffset()) {

((View) getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY());

invalidate();

}

}

//在外部调用这个方法即可

public void smoothScrollTo(int destX, int destY) {

int scrollX = getScrollX();

int delta = destX - scrollX;

mScroller.startScroll(scrollX, 0, delta,0 ,6000);

invalidate();

}

}

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对亿速云的支持。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28956075/article/details/117315711

智能推荐

ObjectOrientedProgramming - 面向对象的编程(包、继承、多态的一部分:向下/向下转型,重写) -Java_Dark And Grey的博客-程序员秘密

文章目录包包 (package) 是组织类的一种方式.代码案例(打印数组):附图(缺少的那句代码,作用就是导入一个包。从包中拿出你需要的类)图1图2经由上面一个简单的程序附图2,引申出一格问题: 什么是 package 和 import?在java里,包肯定不止一个,那么就意味着 一个 类,可能有在不同包里都有它,只不过实现的功能不同。选择对应包中的类,编译器会自动帮你导入所需包中的类例1例2既然知道包是怎么导入它当中的类,那么该如何使用? new它!实例1(导入(包中的类)情况)实例2(不导入(包中的类)

gfoj A_scutbenson的博客-程序员秘密

题目:http://www.gdfzoj.com/oj/contest/475/problems/3我们有n个相同的弹珠,k个相同的盒子.现在随机的将每个弹珠扔进盒子中,使得最终每个盒子非空,求出一共有多少种不同的方案.两种方案不同当且仅当将盒子中的弹珠数最小表示后不同.由于方案数可能非常多,答案对998244353取模输入7 3输出4 很容易想到dp,也容易想...

背包问题Java代码_xuptly的博客-程序员秘密

动态规划解答:package DongTaiGuiHua;import java.util.Scanner;public class BeiBao01 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int N = input....

Unity 设置帧率和垂直同步_iningwei的博客-程序员秘密_unity 垂直同步

Application.targetFrameRate = frameRate;默认情况下targetFrameRate值为-1,游戏会根据平台默认帧率进行渲染:在pc平台上,默认帧率是当前性能能达到的最大帧率在移动平台上处于省电的目地默认帧率一般都小于最大帧率。一般而言一般是30帧。在iOS平台上默认帧率是60帧(这个未从相关文档查到验证,只是有网友提出)在WebGL平台上是根据浏览器...

python正则表达式和数据库_hongge_smile的博客-程序员秘密

正则表达式和数据库5.正则表达式正则表达式,又称规则表达式**。**(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。re模块的高级用法1. searchre.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回...

搭建ipv6有状态dhcp服务器,1-ipv6服务器之-dhcpv6(isc-dhcp)_小种经略相公的博客-程序员秘密

Ubuntu搭建dhcpv6服务器来分配IP给路由器/电脑,比较常用的就是isc-dhcp(Internet Systems Consortium)1. 安装isc-dhcp服务器上去找到最新的版本,如dhcp-4.2.1.tar.gz,下载后在 Ubuntu上编译安装。命令如下:先解压dhcp-4.2.1.tar.gz ,命令tar -xzf dhcp-4.2.1.tar.gz然后进到该目录下,...

随便推点

Python 进行数据的爬取(网络爬虫)_蔚1的博客-程序员秘密

随着大数据时代的来临,数据的价值也越来越大,因此如何获取网络上的数据也是许多程序员的必备知识之一。本人作为某上市公司爬虫组的一员,有过一定的爬虫经验,将简单介绍一下爬虫以及爬虫常用到的一些相关技术,希望对大家有所帮助。本 Chat 的主要包括以下几个方面:什么是爬虫爬虫的主要分类(静态页面、动态页面等)Python 进行爬虫常用的一些工具(数据的请求、数据的解析、数据的存储等方面)实战...

Vue中的filter过滤器是使用方法_有一个王小森的博客-程序员秘密_vue中使用filter

在Vue中filter过滤器是一个非常强大的功能。个人觉得称它为加工车间会更加贴切一些。过滤器可以用来筛选出符合条件的,丢弃不符合条件的;加工车间既可以筛选,又可以对筛选出来的进行加工。一、filter的作用是:对值进行筛选加工。二、使用的地方有两个位置,和两个方式。{{ msg | filterA }}双括号插值内。<h1 v-bind:id=" msg | filt...

运行keras出现 FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated解决办法_瞳瞳瞳呀的博客-程序员秘密

运行keras出现 FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy,原则来说,没啥影响,还是能运行,但是看着难受解决办法:点击蓝色的链接:进入根据每个报错的蓝色链接,你会发现都是这种:把里面的1 改成(1,)_np_qint8 = np.dtype([("qint8", np.int8, 1)])_np_quint8

C语言将16进制的数转换为字符串的方法_yummy说电子的博客-程序员秘密_c语言16进制转字符串

将16进制的数据改为字符串,也就是0xAB,改成“AB”。。。虽然看上去没什么用。

四年级计算机课认识窗口教案,四年级信息技术上册第三课《认识窗口》教学设计..._血管瘤专家孔强的博客-程序员秘密

四年级信息技术上册第三课《认识窗口》教学设计目标确定的依据1.课程标准的相关要求建立对计算机的感性认识,了解信息技术在日常生活中的应用,培养学生学习使用计算机的兴趣和意识。 2.教材分析本课学生接触Windows操作系统中的最重要的特点——窗口。窗口的几种打开方法很重要但是不难掌握。要让学生了解Windows操作系统中要用到窗口的操作外,大部分应用软件都有窗口的操作。窗口各部分的名称需要学生...

冀教版四年级上册计算机教案,冀教版信息技术四年级上册教案_豆小娘的博客-程序员秘密

第1课小小品评家 学科美术年级二年级 教学内容《小小品评家》 课型造型表现课时1课时 教材分析 生活中不是缺少美,而是缺少发现美的眼睛。如何让学生拥有一双善于发现的眼睛,引导他们用眼睛去鉴赏美,用心灵去感受美是每一位美术教师都应该研究的课题。“小小品评家”一课,正是要引导学生...三年级科学下册教案 本册主要围绕“性质与功能”这一组统一概念,整合教学内容,进行单元和课题设计。全册共有6个单元,19...

推荐文章

热门文章

相关标签