Android下图片或按钮等可拖动到任意位置的效果实现源码
from: http://my.oschina.net/castusz/blog/66338
下面是activity的代码:
- public class DraftTest extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_draft_test);
- DisplayMetrics dm = getResources().getDisplayMetrics();
- final int screenWidth = dm.widthPixels;
- final int screenHeight = dm.heightPixels - 50;
- // 拖动的按钮
- final Button b = (Button) findViewById(R.id.startBtn);
- // 添加触摸事件
- b.setOnTouchListener(new OnTouchListener() {
- int lastX, lastY; // 记录移动的最后的位置
- public boolean onTouch(View v, MotionEvent event) {
- // 获取Action
- int ea = event.getAction();
- Log.i("TAG", "Touch:" + ea);
- switch (ea) {
- case MotionEvent.ACTION_DOWN: // 按下
- lastX = (int) event.getRawX();
- lastY = (int) event.getRawY();
- break;
- /**
- * layout(l,t,r,b) l Left position, relative to parent t Top
- * position, relative to parent r Right position, relative to
- * parent b Bottom position, relative to parent
- * */
- case MotionEvent.ACTION_MOVE: // 移动
- // 移动中动态设置位置
- int dx = (int) event.getRawX() - lastX;
- int dy = (int) event.getRawY() - lastY;
- int left = v.getLeft() + dx;
- int top = v.getTop() + dy;
- int right = v.getRight() + dx;
- int bottom = v.getBottom() + dy;
- if (left < 0) {
- left = 0;
- right = left + v.getWidth();
- }
- if (right > screenWidth) {
- right = screenWidth;
- left = right - v.getWidth();
- }
- if (top < 0) {
- top = 0;
- bottom = top + v.getHeight();
- }
- if (bottom > screenHeight) {
- bottom = screenHeight;
- top = bottom - v.getHeight();
- }
- v.layout(left, top, right, bottom);
- Log.i("aaa", "position:" + left + ", " + top + ", " + right
- + ", " + bottom);
- // 将当前的位置再次设置
- lastX = (int) event.getRawX();
- lastY = (int) event.getRawY();
- break;
- case MotionEvent.ACTION_UP: // 脱离
- break;
- }
- return false;
- }
- });
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.activity_draft_test, menu);
- return true;
- }
- }
配置文件activity_draft_test.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"
- android:padding="0px"
- tools:context=".DraftTest" >
- <Button
- android:id="@+id/startBtn"
- android:text="tuodongdeanniu"
- android:layout_centerInParent="true"
- android:layout_width="wrap_content" android:layout_height="wrap_content"/>
- </RelativeLayout>
转载于:https://blog.51cto.com/memory/1087179
Android下图片或按钮等可拖动到任意位置的效果实现源码相关推荐
- 【Android 进程保活】提升进程优先级 ( 使用前台 Service 提高应用进程优先级 | 效果展示 | 源码资源 )
文章目录 一. 使用前台 Service 提高应用进程优先级 1. 前台 Service 代码 2. 前台 Service 代码 3. 启动服务 二.效果展示 三.源码资源 一. 使用前台 Servi ...
- 自定义Android带图片的按钮
自定义Android带图片的按钮 前言 现在移动设备的按钮设计讲究大图标小文字,希望用户只要一看到图标便能知道这个按钮是干嘛的,但又要有必要的文字提示,最常见的就数搜索按钮了,上面一个大大的放大镜图标 ...
- android毕业设计——基于Android+XAMPP+MySQL的家校互动平台设计与实现(毕业论文+程序源码)——家校互动平台
基于Android+XAMPP+MySQL的家校互动平台设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+XAMPP+MySQL的家校互动平台设计与实现,文章末尾附有本毕业设 ...
- android毕业设计——基于Android+Java+Python的手机端办公自动化OA系统设计与实现(毕业论文+程序源码)——办公自动化OA系统
基于Android+Java+Python的手机端办公自动化OA系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Java+Python的手机端办公自动化OA系统设计与实 ...
- VC/MFC拖动窗口任意位置移动窗口
除了拖动标题栏移动窗口以外,我们也可以拖动窗口任意位置(除控件)位置而使对话框移动. 这里只讲述基于对话框的程序 class c**dlg:public CDialog { //Constructio ...
- Android列表收缩与展开仿QQ好友列表(非常详细,附源码)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同 ...
- 【javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码)】
javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄像头显示等 )(附源码) 文章目录 javaCV基于虹软人脸识别demo添加电脑摄像头人脸识别(图片保存,视频保存,摄 ...
- Android录屏并利用FFmpeg转换成gif(二)交叉编译FFmpeg源码
Android录屏并利用FFmpeg转换成gif(二) 写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方 ...
- android studio增加一个界面,Android Studio在同一个窗口中打开多个Project【附效果图附源码...
Android Studio在同一个窗口中打开多个Project[附效果图附源码 Android Studio在同一个窗口中打开多个Project[附效果图附源码]
- 教你用python爬取王者荣耀英雄皮肤图片,并将图片保存在各自英雄的文件夹中。(附源码)
教你用python爬取王者荣耀英雄皮肤图片,并将图片保存在各自英雄的文件夹中.(附源码) 代码展示: 保存在各自的文件夹中 美么? 让我们开始爬虫之路 开发环境 windows 10 python3. ...
最新文章
- OpenCV | OpenCV将图像转换成黑白图像(二进制)
- eclipse启动出错的解决方案:org.osgi.framework.BundleExcep...
- spring-servlet.xml与applicationContext.xml
- 使用C#开发ActiveX控件[Obsolete]
- SELECT TOP column FROM table [ORDER BY column [DESC]]
- 【深度学习torch——error】——“xxx.pt is a zip archive(did you mean to use torch.jit.load()?)
- [你必须知道的.NET]第十六回:深入浅出关键字---using全接触
- LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )
- 富文本编辑器 java_HtmlBox富文本编辑器的使用
- 每日小记 2017 2.9
- LeetCode最长回文子串
- 用python生成密码本(不同模式不同密码)
- 如何判断Activity是否在前台显示
- 远程访问计算机硬盘,60秒远程访问路由器硬盘!瞬间变NAS!
- 第三方网络广告平台窘境
- indesign怎么查找拼音_Indesign中怎么给汉字加拼音
- MATLAB-修改图片的背景颜色
- 程序员的选择,技术or管理
- java 判断一个数是否是素数详解
- BLE蓝牙的广播类型