android控件跟随手势滑动改变位置
要求:
1.通过手指移动来拖动图片
2.控制图片不能超出屏幕显示区域
技术点:
1.MotionEvent处理
2.对View进行动态定位(layout)
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><ImageViewandroid:id="@+id/iv_main"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/test"/></RelativeLayout>
MainActivity:
public class MainActivity extends Activity implements OnTouchListener {private ImageView iv_main;private RelativeLayout parentView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv_main = (ImageView) findViewById(R.id.iv_main);parentView = (RelativeLayout) iv_main.getParent();/*int right = parentView.getRight(); //0int bottom = parentView.getBottom(); //0Toast.makeText(this, right+"---"+bottom, 1).show();*///设置touch监听 iv_main.setOnTouchListener(this);}private int lastX;private int lastY;private int maxRight;private int maxBottom;@Overridepublic boolean onTouch(View v, MotionEvent event) {//得到事件的坐标int eventX = (int) event.getRawX();int eventY = (int) event.getRawY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN://得到父视图的right/bottomif(maxRight==0) {//保证只赋一次值maxRight = parentView.getRight();maxBottom = parentView.getBottom();}//第一次记录lastX/lastYlastX =eventX;lastY = eventY;break;case MotionEvent.ACTION_MOVE://计算事件的偏移int dx = eventX-lastX;int dy = eventY-lastY;//根据事件的偏移来移动imageViewint left = iv_main.getLeft()+dx;int top = iv_main.getTop()+dy;int right = iv_main.getRight()+dx;int bottom = iv_main.getBottom()+dy;//限制left >=0if(left<0) {right += -left;left = 0;}//限制topif(top<0) {bottom += -top;top = 0;}//限制right <=maxRightif(right>maxRight) {left -= right-maxRight;right = maxRight;}//限制bottom <=maxBottomif(bottom>maxBottom) {top -= bottom-maxBottom;bottom = maxBottom;}iv_main.layout(left, top, right, bottom);//再次记录lastX/lastYlastX = eventX;lastY = eventY;break;default:break;}return true;//所有的motionEvent都交给imageView处理}
}
转载于:https://www.cnblogs.com/ganchuanpu/p/6512195.html
android控件跟随手势滑动改变位置相关推荐
- android 控件跟随手指移动,类似捕鱼达人效果
public class TestActivity extends AppCompatActivity {private ImageView imageView;private ImageView i ...
- android本页切换子页,android ViewPager控件实现手势滑动切换页签-Fun言
1,主布局文件 android:layout_width="match_parent" android:layout_height="match_parent" ...
- 【Python+Appium】开展自动化测试(十)TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)
目录 前言 一,TouchAction类 1,TouchAction类由webdriver库提供,提供以下方法: 2,tap点击 3,press短按 4,long_press长按 5,move_to移 ...
- android控件的touch事件_聊聊Android嵌套滑动
聊聊Android嵌套滑动 最近工作中遇到了需求是使用 Bottom-Sheet 交互的弹窗,使用了 design 包里面的 CoordinatorLayout 和 BottomSheetBehavi ...
- Android 控件 RecyclerView 看这篇就够了
[Android 控件 RecyclerView] 概述 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传 ...
- Android群英传笔记——第三章:Android控件架构与自定义控件讲解
Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...
- Android 控件 RecyclerView
[Android 控件 RecyclerView] 概述 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传 ...
- 自定义控件android.r,Android控件架构与自定义控件
前言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...
- android缩放组件,Android控件实现图片缩放功能
1 简介 先来一张效果图 TIM图片.gif 上图中灰色的一块是ImageView控件,ImageView中的图片进行左右上下移动,以及双指缩放. 对于android控件的缩放移动,点这里----an ...
最新文章
- 分享memcache和memcached安装过程
- 火狐浏览器插件HTTPFOX抓传输数据
- 845B - Luba And The Ticket
- openstack network
- bin和sbin区别
- eclipse如何设置断点断点处运行快捷键
- 推荐几个不错的苹果电脑截图工具
- 微博、微信朋友圈、QQ空间功能对比
- Rime输入法第三方词库配置
- MP3 Cutter Joiner for Mac(mp3剪辑合并工具)
- 智慧工地管理平台系统赋能建筑企业数字化管理
- 虚拟机linux修复grub,日常系统维护之修复linux的grub引导
- 网页设计之字体设置(上)
- 使用dba_waiters检查锁等待
- CVE-2018-0802个人浅析
- 抗疫行动题材网页设计 大学生最美逆行者感动人物网页代码 众志成城万众一心抗击疫情HTML网页设计
- PTA7-1 厘米换算英尺英寸
- 高并发 收获大厂Offer必不可少的利器
- 微慕小程序开源美化版
- 滑动平均滤波的截止频率与平均点数计算
热门文章
- python filter内置函数_python 内置函数filter
- 对图像数据最主要的预处理: Resize
- 利用中断在 ESP32 MicroPython 程序中读取AM2302
- 测量150kHz接收电路的主要的一些特性:扫频,线性,工作电压影响
- 特使招募-航天三院-智能车竞赛
- 看到这儿,你就不会再轻易相信自己的眼睛
- centos lamp 连接mysql_centOS下lamp安装
- 什么叫大地高_等电位箱有什么用?
- ubuntu 发行版升级注意事项
- java for循环乘法表_JAVA-for循环案例(冒泡、九九乘法表、素数、菱形)