1. 程式人生 > >Android下圖片或按鈕等可拖動到任意位置的效果實現原始碼

Android下圖片或按鈕等可拖動到任意位置的效果實現原始碼

from: http://www.2cto.com/kf/201207/140218.html

Android下圖片可拖動到任意位置的效果
下面為Activity的程式碼:

01
public class DraftTest extends Activity {
02
 /** Called when the activity is first created. */
03
 @Override
04
 public void onCreate(Bundle savedInstanceState) { 
05
  super.onCreate(savedInstanceState); 
06
  setContentView(R.layout.sign);
07
  DisplayMetrics dm = getResources().getDisplayMetrics();
08
  final int screenWidth = dm.widthPixels; 
09
  final int screenHeight = dm.heightPixels - 50; 
10
  //拖動的按鈕
11
  final Button b=(Button)findViewById(R.id.startBtn);
12
 
13
  //新增觸控事件
14
 
15
  b.setOnTouchListener(new OnTouchListener(){
16
   int lastX, lastY; //記錄移動的最後的位置
17
   public boolean onTouch(View v, MotionEvent event) { 
18
    //獲取Action
19
 
20
    int ea=event.getAction();
21
 
22
    Log.i("TAG", "Touch:"+ea);
23
    switch(ea){ 
24
    case MotionEvent.ACTION_DOWN:   //按下
25
     lastX = (int) event.getRawX(); 
26
     lastY = (int) event.getRawY(); 
27
     break; 
28
     /**
29
      * layout(l,t,r,b)
30
      * l  Left position, relative to parent 
31
                    t  Top position, relative to parent 
32
                    r  Right position, relative to parent 
33
                    b  Bottom position, relative to parent  
34
      * */
35
    case MotionEvent.ACTION_MOVE:  //移動
36
     //移動中動態設定位置
37
     int dx =(int)event.getRawX() - lastX; 
38
     int dy =(int)event.getRawY() - lastY; 
39
     int left = v.getLeft() + dx; 
40
     int top = v.getTop() + dy; 
41
     int right = v.getRight() + dx; 
42
     int bottom = v.getBottom() + dy; 
43
     if(left < 0){ 
44
      left = 0; 
45
      right = left + v.getWidth(); 
46
     } 
47
     if(right > screenWidth){ 
48
      right = screenWidth; 
49
      left = right - v.getWidth(); 
50
     } 
51
     if(top < 0){ 
52
      top = 0; 
53
      bottom = top + v.getHeight(); 
54
     } 
55
     if(bottom > screenHeight){ 
56
      bottom = screenHeight; 
57
      top = bottom - v.getHeight(); 
58
     } 
59
     v.layout(left, top, right, bottom); 
60
     Log.i("", "position:" + left +", " + top + ", " + right + ", " + bottom);
61
     //將當前的位置再次設定
62
     lastX = (int) event.getRawX(); 
63
     lastY = (int) event.getRawY(); 
64
     break; 
65
    case MotionEvent.ACTION_UP:   //脫離
66
     break;               
67
    } 
68
    return false; 
69
   }}); 
70     

www.2cto.com
 }
71
}
XML配置檔案Sign.xml的程式碼:

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