比较简单就直接上代码了

  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

让一张图片随着手指的移动而移动相关推荐

  1. ISCC2018 MSIC杂项指南

    第一次玩这种游戏,虽然很弱鸡,还是及时行乐,人生苦短,我解杂项. 0x01.What is that? 解压之后发现一张图片 猜想手指方向为flag,查看属性发现长宽异常,修改长度为600,得到fla ...

  2. IOS自定义图片浏览器,支持浏览多张图片,点击,双击,两手指缩放操作,并显示加载进度条

    图片浏览器Controller的主要思路是:新建一个 JZAlbumViewController,在这个controller里主要显示一个UIScrollView,这个UIScrollView用来显示 ...

  3. 手机版html页面左右滑动切换页面,移动端手指左右滑动切换内容demo

    说在开头 最近移动端做了一个手指左右滑动切换内容的效果demo; 为了表示我的无私,决定分享给诸位:(详细代码见附件) 正文 先上html代码html> 穿衣助理 完成 整个页面ul部分是需要切 ...

  4. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

  5. matlab两张图片合成一张_两张图片合成一幅画意作品的简单方法

    在<教你制作一幅画意摄影作品>的文章中,介绍了Snapseed(指划修图)和ToolWiz Photos(理理相册)两个App中用手机或平板制作画意摄影作品的基本方法,现在再来进一步试试用 ...

  6. android 控件随手指移动_Android 实习生面试经历记录

    code小生,一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:念人远乡 链接:https://www.jianshu.com/p/3cd5ef51eed ...

  7. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 如果不知道如何上传 ...

  8. 第7章第29节:四图排版:四张图片并列排版 [PowerPoint精美幻灯片实战教程]

    当前幻灯片拥有四张图片素材,由于它们的作用相似,并且具有相同的重要性,因此可以将它们并排排列.首先将这张图片移到版面的右侧. 在此处按下手指,并向下方拖动,根据智能参考线的帮助,将图片和右侧的图片保持 ...

  9. 基于OpenCV的手指只数检测

    提示:本项目是由微信公众号:小白学视觉,中Opencv视觉实战项目里为源文,等下也会分享链接.有兴趣的小伙伴们可以关注哦,里面还有很多的基础视觉项目,我个人觉得还是很有意思的. 文章目录 前言 一.手 ...

最新文章

  1. oracle怎么判断主库还是备库,Oracle查看归档是否被备库应用
  2. recv函数_第五十二章、send和recv函数
  3. LeetCode--Factorial Trailing Zeroes(注意)
  4. php 二维sort,php 二维数组排序
  5. java项目类上有黑色的点_图像处理 – 如何使用javacv / opencv识别黑色多边形上的点?...
  6. c ++ 链表_C ++程序查找两个单个链表的并集
  7. 有关文档碎片(document fragment)的用法
  8. 如何使用 indent 美化你的代码
  9. char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么
  10. 编程之美--高效率算出1的数目之扩展问题
  11. 企业微信 发送或接收 图片失败,怎么办?
  12. 怎么快速制作web原型_快速原型制作指南
  13. 怎么把在线网站保存的flv格式转换成mp4
  14. freertos和嵌入式linux区别,嵌入式工程师,你知道为什么要学RTOS?为什么要选用FreeRTOS?...
  15. 移动apn接入点哪个快_电信和联通以及移动物联卡哪个较好
  16. 帝国时代3如何快速实现增加主城生命值
  17. 视频号怎么赚钱?4个赚钱小技巧,实现视频号流量变现!
  18. Alibaba内部Java技术成长笔记,业界良心,程序员最爱
  19. 马哥教育N36第二十四周作业
  20. sql月度分组_SQL语句按年 月 日 季度分组

热门文章

  1. mysql数据库制定位置_MySQL数据库在指定位置增加字段
  2. 天翼云从业认证(1.5)了解Windows和Linux两种操作系统的常见命令和操作
  3. 【项目管理】工具--数据收集
  4. 2021下信息系统项目管理师真题及答案解析
  5. 信息系统项目管理师考前冲刺第一天:项目基础知识和立项管理
  6. Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图
  7. 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程
  8. IBM Rational上海大会印象
  9. redhat7.4安装神通数据库
  10. 神策数据 × 水滴汽车:着眼车主忠诚度,实现转型期逆势增长!