让一张图片随着手指的移动而移动
比较简单就直接上代码了
1 package cn.itcast.mobilesafe; 2 3 import android.app.Activity; 4 import android.content.SharedPreferences; 5 import android.content.SharedPreferences.Editor; 6 import android.os.Bundle; 7 import android.os.Environment; 8 import android.util.Log; 9 import android.view.Display; 10 import android.view.MotionEvent; 11 import android.view.View; 12 import android.view.View.OnClickListener; 13 import android.view.View.OnTouchListener; 14 import android.widget.EditText; 15 import android.widget.FrameLayout; 16 import android.widget.ImageView; 17 import android.widget.RelativeLayout; 18 import android.widget.RelativeLayout.LayoutParams; 19 import android.widget.TextView; 20 21 public class DragViewActiviy extends Activity { 22 protected static final String TAG = "DragViewActiviy"; 23 private ImageView iv_dragview_location; 24 private Display display; 25 private TextView tv_dragview; 26 private long firstTime; 27 private SharedPreferences sp; 28 @Override 29 protected void onCreate(Bundle savedInstanceState) { 30 31 super.onCreate(savedInstanceState); 32 display = getWindowManager().getDefaultDisplay(); 33 sp = getSharedPreferences("config", MODE_PRIVATE); 34 setContentView(R.layout.drag_view); 35 iv_dragview_location = (ImageView) findViewById(R.id.iv_dragview_location); 36 tv_dragview = (TextView) findViewById(R.id.tv_dragview); 37 38 39 int lastx = sp.getInt("lastx", 0); 40 int lasty = sp.getInt("lasty", 0); 41 //只有当ui被完全渲染出来的时候 执行才有用. 42 //iv_dragview_location.layout(l, t, r, b); 43 //在oncreate方法里面 控件的位置 和大小现在还没有被计算显示出来. 44 45 //在布局渲染的第一个阶段进行的. 46 RelativeLayout.LayoutParams params = (LayoutParams) iv_dragview_location.getLayoutParams(); 47 params.leftMargin = lastx; 48 params.topMargin = lasty; 49 iv_dragview_location.setLayoutParams(params); 50 51 iv_dragview_location.setOnClickListener(new OnClickListener() { 52 53 public void onClick(View v) { 54 Log.i(TAG, "哥被点击了"); 55 if (firstTime > 0) {// 已经点击过了 56 long secondTime = System.currentTimeMillis(); 57 long dtime = secondTime - firstTime; 58 if (dtime < 500) { 59 Log.i(TAG, "双击事件"); 60 int tv_width = iv_dragview_location.getRight() 61 - iv_dragview_location.getLeft(); 62 int widowwidth = display.getWidth(); 63 iv_dragview_location.layout(widowwidth / 2 - tv_width 64 / 2, iv_dragview_location.getTop(), widowwidth 65 / 2 + tv_width / 2, 66 iv_dragview_location.getBottom()); 67 68 int lastx = iv_dragview_location.getLeft(); 69 int lasty = iv_dragview_location.getTop(); 70 Editor editor = sp.edit(); 71 editor.putInt("lastx", lastx); 72 editor.putInt("lasty",lasty); 73 editor.commit(); 74 75 76 } 77 } 78 79 firstTime = System.currentTimeMillis(); 80 new Thread() {// 单击的超时处理 81 public void run() { 82 try { 83 Thread.sleep(500); 84 firstTime = 0; 85 } catch (InterruptedException e) { 86 // TODO Auto-generated catch block 87 e.printStackTrace(); 88 } 89 }; 90 }.start(); 91 92 } 93 }); 94 95 iv_dragview_location.setOnTouchListener(new OnTouchListener() { 96 97 int startX;// 记录第一次手指在窗体中的位置. 98 int startY; 99 100 public boolean onTouch(View v, MotionEvent event) { 101 102 switch (event.getAction()) { 103 case MotionEvent.ACTION_DOWN: 104 Log.i(TAG, "摸到"); 105 startX = (int) event.getRawX(); 106 startY = (int) event.getRawY(); 107 108 break; 109 case MotionEvent.ACTION_MOVE: 110 Log.i(TAG, "移动"); 111 int movedX = (int) event.getRawX(); 112 int movedY = (int) event.getRawY(); 113 int dx = movedX - startX; 114 int dy = movedY - startY; 115 // 立刻的更新 imageview在窗体中的位置. 116 int l = iv_dragview_location.getLeft(); 117 int t = iv_dragview_location.getTop(); // 得到imageview在窗体中上面的坐标 118 int r = iv_dragview_location.getRight(); 119 int b = iv_dragview_location.getBottom(); 120 int tv_height = tv_dragview.getBottom() 121 - tv_dragview.getTop(); 122 123 if (t > (display.getHeight() / 2)) {// imageview 移动到了屏幕的下面 124 // 更新 textview 设置在屏幕的上面 125 tv_dragview.layout(tv_dragview.getLeft(), 0, 126 tv_dragview.getRight(), tv_height); 127 128 } else { 129 // 更新 textview 设置在屏幕的下面 130 tv_dragview.layout(tv_dragview.getLeft(), 131 display.getHeight() - tv_height - 15, 132 tv_dragview.getRight(), 133 display.getHeight() - 15); 134 } 135 int newl = l + dx; 136 int newr = r +dx; 137 int newt = t+dy; 138 int newb = b+dy; 139 if(newl < 0|| newr > display.getWidth() || newt < 0 || newb >display.getHeight()){ 140 break; 141 } 142 143 144 iv_dragview_location.layout(newl, newt, newr, newb);// 更新了iv在窗体中的位置 145 146 // 重新记录新的手指的初始位置. 147 startX = (int) event.getRawX(); 148 startY = (int) event.getRawY(); 149 150 break; 151 case MotionEvent.ACTION_UP: 152 Log.i(TAG, "放手"); 153 int lastx = iv_dragview_location.getLeft(); 154 int lasty = iv_dragview_location.getTop(); 155 Editor editor = sp.edit(); 156 editor.putInt("lastx", lastx); 157 editor.putInt("lasty",lasty); 158 editor.commit(); 159 break; 160 161 } 162 163 return false;// 是否消费掉这个事件 164 } 165 }); 166 167 } 168 }
转载于:https://www.cnblogs.com/developer-wang/archive/2013/01/31/2886677.html
让一张图片随着手指的移动而移动相关推荐
- ISCC2018 MSIC杂项指南
第一次玩这种游戏,虽然很弱鸡,还是及时行乐,人生苦短,我解杂项. 0x01.What is that? 解压之后发现一张图片 猜想手指方向为flag,查看属性发现长宽异常,修改长度为600,得到fla ...
- IOS自定义图片浏览器,支持浏览多张图片,点击,双击,两手指缩放操作,并显示加载进度条
图片浏览器Controller的主要思路是:新建一个 JZAlbumViewController,在这个controller里主要显示一个UIScrollView,这个UIScrollView用来显示 ...
- 手机版html页面左右滑动切换页面,移动端手指左右滑动切换内容demo
说在开头 最近移动端做了一个手指左右滑动切换内容的效果demo; 为了表示我的无私,决定分享给诸位:(详细代码见附件) 正文 先上html代码html> 穿衣助理 完成 整个页面ul部分是需要切 ...
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...
- matlab两张图片合成一张_两张图片合成一幅画意作品的简单方法
在<教你制作一幅画意摄影作品>的文章中,介绍了Snapseed(指划修图)和ToolWiz Photos(理理相册)两个App中用手机或平板制作画意摄影作品的基本方法,现在再来进一步试试用 ...
- android 控件随手指移动_Android 实习生面试经历记录
code小生,一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:念人远乡 链接:https://www.jianshu.com/p/3cd5ef51eed ...
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 如果不知道如何上传 ...
- 第7章第29节:四图排版:四张图片并列排版 [PowerPoint精美幻灯片实战教程]
当前幻灯片拥有四张图片素材,由于它们的作用相似,并且具有相同的重要性,因此可以将它们并排排列.首先将这张图片移到版面的右侧. 在此处按下手指,并向下方拖动,根据智能参考线的帮助,将图片和右侧的图片保持 ...
- 基于OpenCV的手指只数检测
提示:本项目是由微信公众号:小白学视觉,中Opencv视觉实战项目里为源文,等下也会分享链接.有兴趣的小伙伴们可以关注哦,里面还有很多的基础视觉项目,我个人觉得还是很有意思的. 文章目录 前言 一.手 ...
最新文章
- oracle怎么判断主库还是备库,Oracle查看归档是否被备库应用
- recv函数_第五十二章、send和recv函数
- LeetCode--Factorial Trailing Zeroes(注意)
- php 二维sort,php 二维数组排序
- java项目类上有黑色的点_图像处理 – 如何使用javacv / opencv识别黑色多边形上的点?...
- c ++ 链表_C ++程序查找两个单个链表的并集
- 有关文档碎片(document fragment)的用法
- 如何使用 indent 美化你的代码
- char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么
- 编程之美--高效率算出1的数目之扩展问题
- 企业微信 发送或接收 图片失败,怎么办?
- 怎么快速制作web原型_快速原型制作指南
- 怎么把在线网站保存的flv格式转换成mp4
- freertos和嵌入式linux区别,嵌入式工程师,你知道为什么要学RTOS?为什么要选用FreeRTOS?...
- 移动apn接入点哪个快_电信和联通以及移动物联卡哪个较好
- 帝国时代3如何快速实现增加主城生命值
- 视频号怎么赚钱?4个赚钱小技巧,实现视频号流量变现!
- Alibaba内部Java技术成长笔记,业界良心,程序员最爱
- 马哥教育N36第二十四周作业
- sql月度分组_SQL语句按年 月 日 季度分组
热门文章
- mysql数据库制定位置_MySQL数据库在指定位置增加字段
- 天翼云从业认证(1.5)了解Windows和Linux两种操作系统的常见命令和操作
- 【项目管理】工具--数据收集
- 2021下信息系统项目管理师真题及答案解析
- 信息系统项目管理师考前冲刺第一天:项目基础知识和立项管理
- Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图
- 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程
- IBM Rational上海大会印象
- redhat7.4安装神通数据库
- 神策数据 × 水滴汽车:着眼车主忠诚度,实现转型期逆势增长!