Android view随触碰滑动效果

主要思路是通过父布局的onTouch(),方法,获取滑动到的位置和点击下的位置,再去设置子view的位置。我的代码中考虑了在边缘情况。需要注意的是,使用RelativeLayout,以imageView为例。从测试结果来看,bottomMargin 和rightMargin 性能非常差,最好还是用leftMargin与topMargin定位。

下面是运行效果:

布局文件里面就是一个Relativelayout中有一个ImageView。如下

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/relativeLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xingyi.moveviewwithtouch.MainActivity"> <ImageView android:id="@+id/imageView" android:layout_width="40dp" android:layout_height="40dp" android:background="@android:color/black"/> </RelativeLayout>

Java代码如下,这里考虑了边缘位置滑动的效果。如果考虑,在最左边缘imageView会有一半在屏幕之外,在最右边缘会缩小,直到看不见。

package com.xingyi.moveviewwithtouch; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity { ImageView imageView; RelativeLayout relativeLayout; int heightRL,widthRL; int halfHeight,halfWidth; boolean first=true; private int widthImg; private int heightImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } //初始化视图 private void initView() { imageView = (ImageView) findViewById(R.id.imageView); relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout); //获取滑动瞬间位置和点击瞬间位置,并移动imageview relativeLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_MOVE: moveView(imageView, motionEvent.getX(), motionEvent.getY()); break; case MotionEvent.ACTION_DOWN: getWidthAndHeight(); moveView(imageView, motionEvent.getX(), motionEvent.getY()); break; default: break; } return true; } }); } //因为不能在初始化视图时获得长宽,而每次计算一次长宽又影响性能 private void getWidthAndHeight(){ if(first){ widthRL=relativeLayout.getWidth(); heightRL=relativeLayout.getHeight(); widthImg=imageView.getWidth(); heightImg=imageView.getHeight(); halfWidth = imageView.getWidth() / 2;//imageView宽度的一半 halfHeight = imageView.getHeight() / 2;//imageView高度的一半 first=false; } } //滑动瞬间,将x和y分别作imageView的中心点到relativeLayout最左和顶端距离 private void moveView(View view, float x, float y) { RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); //设置水平位置 if (x < halfWidth) {//左边缘 params.leftMargin = 0;//设置imageview到左端距离为0 } else if (x > widthRL- halfWidth) { params.leftMargin = widthRL-widthImg;//设置imageview左端到左端端距离(params.rightMargin的性能非常糟糕) } else { params.leftMargin = (int) (x - halfWidth);//imageview左端到relativelayout左端距离 } //设置竖直位置 if (y < halfHeight) { params.topMargin = 0; } else if (y > heightRL - halfHeight) { params.topMargin = heightRL-widthImg;//params.bottomMargin的性能非常糟糕 } else { params.topMargin = (int) (y - halfHeight); } view.setLayoutParams(params); } }

总结

以上所述是小编给大家介绍的Android view随触碰滑动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-07-30 04:49:52

Android view随触碰滑动效果的相关文章

Android使用ViewPager实现无限滑动效果_Android

前言 其实仔细想一下原理还是挺简单的.无非是当我们滑动到最后一页,再向后滑动时定位到第一页;当我们滑动到第一页,再向前滑动时定位到最后一页. 但是,相信很多朋友都遇到过这个问题:视图的过度效果不自然. 小编也是通过百度和谷歌查找了很多解决方案,实验了很多方法,总结了一个相对不错的方法,接下来给各位分享下滑动效果.实现细节以及一些踩过的坑. 1.无限滑动效果(左右无限滑动) 事先准备好2张滑动图片(有想试验的小伙伴,自备图片啊,小编就不提供了...) 运行效果图(左右无限循环): 为了显示更加直观

jquery hwSlider响应式可触控滑动效果例子

今天我们继续内容滑动切换效果的第二部分讲解.如今我们的web开发都要适应移动设备,就是说我们的web页面要在移动设备如手机端也能正常访问,所以我将第一部分的基本切换效果做了加强,增加了响应式和触控滑动效果. 本文是hwSlider-内容滑动切换效果的第二部分,演示DEMO都是基于第一部分内容的基础上的,所以,如果您还没阅读过第一部分的话,请先移步参阅:hwSlider-内容滑动切换效果(一) 响应式 什么是响应式设计,这里我就不描述了.在hwSlider中,我们通过CSS来设置滑块的宽度和高度,

Android实现导航菜单左右滑动效果

今天给大家介绍在Android中实现顶部导航菜单左右滑动效果的二种解决方案. 第一种解决方案:  在以前的一篇博文中我使用android-support-v4.jar实现了左右滑动指引效果,有兴趣的朋友可以查看: http://www.cnblogs.com/hanyonglu/archive/2012/04/07/2435589.html    那么今天第一个示例我仍然使android-support-v4.jar来实现菜单左右滑动效果,关于这个包的信息,不再详述,大家可以查看官方文档. 实现

Android实现探探图片滑动效果

之前一段时间,在朋友的推荐下,玩了探探这一款软件,初玩的时候,就发现,这款软件与一般的社交软件如陌陌之类的大相径庭,让我耳目一新,特别是探探里关于图片滑动操作让人觉得非常新鲜.所以在下通过网上之前的前辈的经历加上自己的理解,也来涉涉水.下面是网上找的探探的原界面 当时就非常想通过自己来实现这种仿探探式的效果,然而却没什么思路.不过毋庸置疑的是,这种效果的原理肯定和 ListView /RecyclerView 类似,涉及到 Item View 的回收和重用,否则早就因为大量的 Item View

Android实现网易严选标签栏滑动效果

标签栏是一个非常常见的控件,似乎也是一个比较简单的控件,但如果在标签下方加个下划线的话,就还是可以玩出挺多花来的. 网易严选的标签栏就做的很不错,里面隐藏着诸多细节: 手动滑动页面,下划线会跟着滑动. 选择一个标签后,下划线会有滑动过去的动画. 选择最左端或最右端的标签,标签栏会进行滑动,使得标签向中间靠拢(如果可以滑的话). 仔细分析下,需要在简单标签栏的基础上实现以下逻辑: 画出下划线. 监听手动滑动页面事件,实时更新下划线位置. 切换标签时,开始下划线滑动的动画,并判断是否要同时滑动标签栏

Android实现左右滑动效果的方法详解_Android

本示例演示在Android中实现图片左右滑动效果. 关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来就让我们开始实现这种效果.为了方便大家理解,我们先来看一下效果图:主要效果图如下图:    接下来我们看一下程序结构图: MainActivity文件中代码: 复制代码 代码如下: package com.android.flip;import android.app.Activity;import a

Android实现左右滑动效果的方法详解

本示例演示在Android中实现图片左右滑动效果. 关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来就让我们开始实现这种效果.为了方便大家理解,我们先来看一下效果图:主要效果图如下图: 接下来我们看一下程序结构图: MainActivity文件中代码:复制代码 代码如下:package com.android.flip;import android.app.Activity;import androi

jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)_jquery

今天我们继续内容滑动切换效果的第二部分讲解.如今我们的web开发都要适应移动设备,就是说我们的web页面要在移动设备如手机端也能正常访问,所以我将第一部分的基本切换效果做了加强,增加了响应式和触控滑动效果. 效果展示     源码下载 本文是hwSlider-内容滑动切换效果的第二部分,演示DEMO都是基于第一部分内容的基础上的,所以,如果您还没阅读过第一部分的话,请先移步参阅:基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一) 响应式 什么是响应式设计,这里我就不描述了

Android Scroll滑动效果实例_Android

        相对于在Android2.x版本上出现的长按.点击事件的效果,不得不说,滑动操作具有更好的用户体验.因此,从Android 4.X版本开始,出现了更多滑动操作的效果.越来越多第三方应用模仿这样的效果,来改善自己的应用.本文,我们刨根问底来探寻滑动效果的产生. 滑动效果如何产生 滑动一个View,其本质就是移动一个View.便是改变它的坐标位置,它的原理与动画产生的效果原理应该是如出一辙的.其最终本质都是改变其坐标.所以,我们要实现View滑动的效果,就只需要监听用户的触摸事件,动