onTouch例子:Move Button

一个点击拖动的button,为了测试onTouch方法,给button添加onTouchListener,这个listener要重写public boolean onTouch(View v, MotionEvent event)方法,这里同时测试了是否超出屏幕范围,如果超出了,就以超出部分的屏幕界限做为最终显示位置。代码如下:

 1 public class MoveButtonActivity extends Activity {   
 2     public Button moveb;       
 3     /** Called when the activity is first created. */     
 4     @Override     
 5     public void onCreate(Bundle savedInstanceState) {      
 6         super.onCreate(savedInstanceState);       
 7         setContentView(R.layout.main);        
 8         moveb = (Button) findViewById(R.id.mb);  
 9         DisplayMetrics dm = getResources().getDisplayMetrics(); 
10         final int screenWidth = dm.widthPixels;       
11         final int screenHeight = dm.heightPixels - 50;   
12         moveb.setOnTouchListener(new OnTouchListener() {   
13             int end_x, end_y;              
14             @Override          
15             public boolean onTouch(View v, MotionEvent event) {
16                 // TODO Auto-generated method stub    
17                 switch (event.getAction()) {    
18                     case MotionEvent.ACTION_DOWN:          
19                         end_x = (int) event.getRawX();  
20                         end_y = (int) event.getRawY(); 
21                         break;      
22                     case MotionEvent.ACTION_MOVE:    
23                         int dx = (int) event.getRawX() - end_x;                      
24                         int dy = (int) event.getRawY() - end_y;                      
25                         int l = v.getLeft() + dx;                      
26                         int b = v.getBottom() + dy;                      
27                         int r = v.getRight() + dx;                      
28                         int t = v.getTop() + dy;                      
29                         // 下面判断移动是否超出屏幕                     
30                         if (l < 0) {                          
31                             l = 0;                          
32                             r = l + v.getWidth();                      
33                         }                     
34                         if (t < 0) {              
35                             t = 0;          
36                             b = t + v.getHeight();   
37                         }           
38                         if (r > screenWidth) {                          
39                             r = screenWidth;                          
40                             l = r - v.getWidth();                      
41                         }                      
42                         if (b > screenHeight) {   
43                             b = screenHeight;                         
44                             t = b - v.getHeight();             
45                         }               
46                         v.layout(l, t, r, b); 
47                         end_x = (int) event.getRawX();    
48                         end_y = (int) event.getRawY();                    
49                         Toast.makeText(MoveButtonActivity.this, "当前位置:" + l + "," + t + "," + r + "," + b, Toast.LENGTH_SHORT).show();
50                             v.postInvalidate();                    
51                             break;                
52                     case MotionEvent.ACTION_UP:         
53                         Toast.makeText(MoveButtonActivity.this, "离开屏幕", Toast.LENGTH_SHORT).show();            
54                         break;                 
55                 }              
56                 return false;     
57             }     
58         });   
59     } 
60 } 

这个很简单  没的解释~当时就为了试试onTouch

转载于:https://www.cnblogs.com/vtianyun/archive/2012/04/15/2450961.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值