要求:
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控件跟随手势滑动改变位置相关推荐

  1. android 控件跟随手指移动,类似捕鱼达人效果

    public class TestActivity extends AppCompatActivity {private ImageView imageView;private ImageView i ...

  2. android本页切换子页,android ViewPager控件实现手势滑动切换页签-Fun言

    1,主布局文件 android:layout_width="match_parent" android:layout_height="match_parent" ...

  3. 【Python+Appium】开展自动化测试(十)TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

    目录 前言 一,TouchAction类 1,TouchAction类由webdriver库提供,提供以下方法: 2,tap点击 3,press短按 4,long_press长按 5,move_to移 ...

  4. android控件的touch事件_聊聊Android嵌套滑动

    聊聊Android嵌套滑动 最近工作中遇到了需求是使用 Bottom-Sheet 交互的弹窗,使用了 design 包里面的 CoordinatorLayout 和 BottomSheetBehavi ...

  5. Android 控件 RecyclerView 看这篇就够了

    [Android 控件 RecyclerView] 概述 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传 ...

  6. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  7. Android 控件 RecyclerView

    [Android 控件 RecyclerView] 概述 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传 ...

  8. 自定义控件android.r,Android控件架构与自定义控件

    前言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...

  9. android缩放组件,Android控件实现图片缩放功能

    1 简介 先来一张效果图 TIM图片.gif 上图中灰色的一块是ImageView控件,ImageView中的图片进行左右上下移动,以及双指缩放. 对于android控件的缩放移动,点这里----an ...

最新文章

  1. 分享memcache和memcached安装过程
  2. 火狐浏览器插件HTTPFOX抓传输数据
  3. 845B - Luba And The Ticket
  4. openstack network
  5. bin和sbin区别
  6. eclipse如何设置断点断点处运行快捷键
  7. 推荐几个不错的苹果电脑截图工具
  8. 微博、微信朋友圈、QQ空间功能对比
  9. Rime输入法第三方词库配置
  10. MP3 Cutter Joiner for Mac(mp3剪辑合并工具)
  11. 智慧工地管理平台系统赋能建筑企业数字化管理
  12. 虚拟机linux修复grub,日常系统维护之修复linux的grub引导
  13. 网页设计之字体设置(上)
  14. 使用dba_waiters检查锁等待
  15. CVE-2018-0802个人浅析
  16. 抗疫行动题材网页设计 大学生最美逆行者感动人物网页代码 众志成城万众一心抗击疫情HTML网页设计
  17. PTA7-1 厘米换算英尺英寸
  18. 高并发 收获大厂Offer必不可少的利器
  19. 微慕小程序开源美化版
  20. 滑动平均滤波的截止频率与平均点数计算

热门文章

  1. python filter内置函数_python 内置函数filter
  2. 对图像数据最主要的预处理: Resize
  3. 利用中断在 ESP32 MicroPython 程序中读取AM2302
  4. 测量150kHz接收电路的主要的一些特性:扫频,线性,工作电压影响
  5. 特使招募-航天三院-智能车竞赛
  6. 看到这儿,你就不会再轻易相信自己的眼睛
  7. centos lamp 连接mysql_centOS下lamp安装
  8. 什么叫大地高_等电位箱有什么用?
  9. ubuntu 发行版升级注意事项
  10. java for循环乘法表_JAVA-for循环案例(冒泡、九九乘法表、素数、菱形)