六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 128|回复: 0

拖动Button显示效果(完善版)

[复制链接]

升级  54.33%

109

主题

109

主题

109

主题

举人

Rank: 3Rank: 3

积分
363
 楼主| 发表于 2013-2-7 19:23:58 | 显示全部楼层 |阅读模式
原文:http://www.eoeandroid.com/thread-417-1-3.html
在原文上修改,使得Buttton不能拖动出屏幕范围,代码如下:

public class DraftTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        DisplayMetrics dm=getResources().getDisplayMetrics();
        final int screenWidth=dm.widthPixels;
        final int screenHeight=dm.heightPixels-50;
        
        final Button b=(Button)findViewById(R.id.btn);
        
        b.setOnTouchListener(new OnTouchListener(){   
   
   int lastX,lastY;
         
         @Override
   public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
          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 l=v.getLeft()+dx;
           int b=v.getBottom()+dy;
           int r=v.getRight()+dx;
           int t=v.getTop()+dy;
           if(l<0){
            l=0;   
            r=l+v.getWidth();
           }
           
           if(t<0){
            t=0;
            b=t+v.getHeight();
           }
           
           if(r>screenWidth){
            r=screenWidth;
            l=r-v.getWidth();
           }
         
           if(b>screenHeight){
            b=screenHeight;
            t=b-v.getHeight();
           }
           v.layout(l, t, r, b);
           
           lastX=(int)event.getRawX();
           lastY=(int)event.getRawY();
           Toast.makeText(DraftTest.this,
             "当前位置:"+l+","+t+","+r+","+b,
             Toast.LENGTH_SHORT).show();
           v.postInvalidate();           
           break;
          case MotionEvent.ACTION_UP:
           break;         
          }
    return false;
   }});
    }
}
运行效果如下:

<div style="display: none;" class="tatt"><div class="crly"><div class="y">2010-5-14 19:42 上传
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表