文档章节

Android下图片或按钮等可拖动到任意位置的效果实现源码

岳静
 岳静
发布于 2012/07/10 19:45
字数 340
阅读 3565
收藏 9

Android下图片可拖动到任意位置的效果
下面为Activity的代码:

public class DraftTest extends Activity {
 /** Called when the activity is first created. */  
 @Override  
 public void onCreate(Bundle savedInstanceState) {   
  super.onCreate(savedInstanceState);   
  setContentView(R.layout.sign);
  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("", "position:" + left +", " + top + ", " + right + ", " + bottom);
     //将当前的位置再次设置
     lastX = (int) event.getRawX();   
     lastY = (int) event.getRawY();   
     break;   
    case MotionEvent.ACTION_UP:   //脱离
     break;                 
    }   
    return false;   
   }});   
 } 
}

XML配置文件Sign.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/layoutRacingNeedForSpeed" android:padding="0px"
 android:layout_width="fill_parent" android:layout_height="fill_parent">
 <Button 
  android:id="@+id/startBtn"
  android:text="tuodongdeanniu"
  android:layout_centerInParent="true"
  android:layout_width="wrap_content" android:layout_height="wrap_content"/>
</RelativeLayout>

这样就可以实现了~

© 著作权归作者所有

岳静

岳静

粉丝 45
博文 19
码字总数 8678
作品 0
深圳
高级程序员
私信 提问
加载中

评论(2)

四档路飞
四档路飞
确实好用,只是不知道为什么我的图片拖动的范围那么小
d
dragon_linux
此代码直接复制到相应的位置就可以实现,
鉴定完毕。很好用。
Android开发---MediaPlayer简单音乐播放器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/zhaokx3/article/details/53432718 Android开发—MediaPlayer简单音乐...

OneDay-X
2016/12/02
0
0
【android基础学习之六】——常用效果1

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光
2012/03/08
1K
0
一个效果很华丽的仿桌面APP,却胜似Launcher

开发Android APP的同学是否对于Launcher实现的绚丽效果而痴迷呢?什么,连Android Launcher是什么都不知道。好吧,拿起侬的手机,在解锁后的首页界面上左右滑动滑动,体验体验,这个就是Lau...

Jack_1900
2014/07/24
596
0
【android基础学习之七】——常用效果2

声明:学习的书籍《Android应用开发揭秘》,这里记录学习该书籍的日志,引用的相关代码与总结描述,没有商业的用途,完全是自我学习的一个记录,刚刚学习不可避免会出现很多问题,若是有错误...

晨曦之光
2012/03/08
1K
0
android实例源码,渐变图像图片浏览高仿美团!

渐变颜色渐变文字渐变图像GradualshowcolorAndResourse 根据图片高度动态变化的ViewPager android Kotlin开发的一款超简单的图片浏览源码 android多种reveal动画效果 栗子——高仿美团首页分...

莫非有道
2017/11/08
29
0

没有更多内容

加载失败,请刷新页面

加载更多

js如何控制table中的某一行动态置顶

两行代码搞定: $('#'+item.roadCode).fadeOut().fadeIn();//获取到需要置顶的行 $(".table").prepend($('#'+item.roadCode)); 其中,fadeOut()方法 作用 --- 从可见到隐藏 如下: prepend(......

码妞
今天
4
0
四种解决Nginx出现403 forbidden 报错的方法

我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下: 1....

dragon_tech
今天
3
0
获取RestResultResponse返回的值

Springboot项目,需要调其他服务的接口,返回值类型是RestResultResponse 打断点的结果集是这个 打印出来的getData(): [{id=3336b624-8474-4dd9-bd5b-c7358687c877, paraNo=104, para=Postpo...

栾小糖
今天
4
0
【小学】 生成10以内的加减法

#!/usr/bin/env python# coding: utf-8from random import randrange# 题目的最大数值R_MAX = 10# 生成的题目的数量R_PAGE = 70# 生成减法列表def get_sub_list():...

Tensor丨思悟
今天
11
0
JavaScript设计模式——适配器模式

  适配器模式是设计模式行为型模式中的一种模式;   定义:   适配器用来解决两个已有接口之间不匹配的问题,它并不需要考虑接口是如何实现,也不用考虑将来该如何修改;适配器不需要修...

有梦想的咸鱼前端
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部