来自老外:
import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.os.Bundle;import android.view.MotionEvent ;import android.widget.AbsoluteLayout;import android.widget.Button;public class Drag_And_Drop extends Activity {  /** Called when the activity is first created. */  @Override   public void onCreate(Bundle icicle) {       super.onCreate(icicle);       MyView tx = new MyView(this);       tx.setText("Drag Me");       AbsoluteLayout l = new AbsoluteLayout(this);       AbsoluteLayout.LayoutParams p = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,10,10);       l.addView(tx,p);       setContentView(l);  }}class MyView extends Button{        public MyView(Context c){           super(c);        }        @Override        public boolean onMotionEvent(MotionEvent event) {          int action = event.getAction();          int mCurX = (int)event.getX();          int mCurY = (int)event.getY();          if ( action == MotionEvent.ACTION_MOVE ) {             //this.setText("x: " + mCurX + ",y: " + mCurY );              AbsoluteLayout.LayoutParams p = newAbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,this.mLeft + mCurX,this.mTop +mCurY);              this.setLayoutParams (p);          }          if ( action == MotionEvent.ACTION_UP ) {            //this.setText("not moving");          }          return true;        }        @Override        public void draw(Canvas canvas) {          // TODO Auto-generated method stub          super.draw(canvas);        }    }


拖拽图片效果

方法一:
import android.app.Activity;  import android.os.Bundle;  import android.view.MotionEvent;  import android.view.View;  import android.view.View.OnTouchListener;  import android.widget.ImageView;  public class DragSample01 extends Activity {      ImageView img;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.drag_sample01);                  img = (ImageView)findViewById(R.id.img_view);                    img.setOnTouchListener(new OnTouchListener(){                         private int mx, my;                       public boolean onTouch(View v, MotionEvent event) {                  switch(event.getAction()) {                               case MotionEvent.ACTION_MOVE:                      mx = (int)(event.getRawX());                      my = (int)(event.getRawY() - 50);                                            v.layout(mx - img.getWidth()/2, my - img.getHeight()/2, mx + img.getWidth()/2, my + img.getHeight()/2);                      break;                  }                  return true;              }});      }  }  

方法二:
import android.app.Activity;  import android.os.Bundle;  import android.view.MotionEvent;  import android.view.View;  import android.view.View.OnTouchListener;  import android.widget.ImageView;  public class DragSample01 extends Activity {      ImageView img;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.drag_sample01);                  img = (ImageView)findViewById(R.id.img_view);                    img.setOnTouchListener(new OnTouchListener(){                         private float x, y;              private int mx, my;                       public boolean onTouch(View v, MotionEvent event) {                  switch(event.getAction()) {                   case MotionEvent.ACTION_DOWN:                      x = event.getX();                      y = event.getY();                  case MotionEvent.ACTION_MOVE:                      mx = (int)(event.getRawX() - x);                      my = (int)(event.getRawY() - 50 - y);                                            v.layout(mx, my, mx + v.getWidth(), my + v.getHeight());                      break;                  }                  return true;              }});      }  }  


拖动按钮到处跑
1. 布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><Button android:id="@+id/btn" android:layout_width="fill_parent"android:layout_height="wrap_content" android:text="拖动看看~~" /></LinearLayout>

2. 代码

import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Button;public class DraftTest extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);final Button btn = (Button) findViewById(R.id.btn);btn.setOnTouchListener(new OnTouchListener() {int[] temp = new int[] { 0, 0 };public boolean onTouch(View v, MotionEvent event) {int eventaction = event.getAction();int x = (int) event.getRawX();int y = (int) event.getRawY();switch (eventaction) {case MotionEvent.ACTION_DOWN: // touch down so check if thetemp[0] = (int) event.getX();temp[1] = y - v.getTop();break;case MotionEvent.ACTION_MOVE: // touch drag with the ballv.layout(x - temp[0], y - temp[1], x + v.getWidth()- temp[0], y - temp[1] + v.getHeight());//v.postInvalidate();break;case MotionEvent.ACTION_UP:break;}return false;}});}}


另一种:
import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Button;public class DraftTest extends Activity {/** Called when the activity is first created. */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;public boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubswitch (event.getAction()) {case MotionEvent.ACTION_DOWN:lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;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);lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;case MotionEvent.ACTION_UP:break;}return false;}});}}


再一个,浮动按钮的实现。
主要功能:
点击按钮可以进行拖动;
当点击按钮时按钮会出现于所有按钮的最上方;
import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.text.style.AbsoluteSizeSpan;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.AbsoluteLayout;import android.widget.Button;public class HelloWorld2 extends Activity {    /** Called when the activity is first created. */AbsoluteLayout mLayoutGroup = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.main);                mLayoutGroup = new AbsoluteLayout(this);        AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams        (320, 480, 0, 0);                setContentView(mLayoutGroup, layoutParams);                Button button= new Button(this);        button.setText("testButton");        layoutParams = new AbsoluteLayout.LayoutParams(120, 60, 20, 20);        mLayoutGroup.addView(button, layoutParams);        button.setOnClickListener(new OnClickListener() {public void onClick(View arg0) {// TODO Auto-generated method stub//alert();}});        button.setOnTouchListener(touchListener);                final Button btButton = new Button(this);        btButton.setText("测试按钮移动");        layoutParams = new AbsoluteLayout.LayoutParams(120, 60, 20, 160);        mLayoutGroup.addView(btButton, layoutParams);        btButton.setOnTouchListener(touchListener);    }        OnTouchListener touchListener = new OnTouchListener()    {    int temp[] = new int[]{0, 0};public boolean onTouch(View arg0, MotionEvent arg1) {// TODO Auto-generated method stubint eventAction = arg1.getAction();Log.e("testButtonMove", "OnTouchAction:"+eventAction);int x = (int)arg1.getRawX();int y = (int)arg1.getRawY();switch (eventAction) {case MotionEvent.ACTION_DOWN:temp[0] = (int)arg1.getX();temp[1] = (int)(y-arg0.getTop());mLayoutGroup.bringChildToFront(arg0);arg0.postInvalidate();break;case MotionEvent.ACTION_MOVE:int left = x - temp[0];int top = y - temp[1];int right = left + arg0.getWidth();int bottom = top + arg0.getHeight();arg0.layout(left, top, right, bottom);arg0.postInvalidate();break;default:break;}return false;}    };        void alert()    {    new AlertDialog.Builder(this)    .setNeutralButton("OK", new DialogInterface.OnClickListener() {public void onClick(DialogInterface arg0, int arg1) {// TODO Auto-generated method stub}}).setTitle("test button").setMessage("test test test!!!").show();    }        }



更多相关文章

  1. android识别 单击和双击事件
  2. android 拖拽图片&拖动浮动按钮到处跑
  3. Android(安卓)利用adb命令 使App自动点击屏幕指定位置
  4. Android(安卓)Studio App LinearLayout多层布局嵌套
  5. Android的SwitchCompat和Switch
  6. android定制对话框
  7. android APP响应H5页面的点击事件(JS交互)
  8. android 自定义TextView中Html超链接点击事件详解
  9. android拖动条和评分组件的使用

随机推荐

  1. Android 属性系统设计分析
  2. Android完全退出App,关闭所有的Activity
  3. Android面试汇总-Android内存和性能优化
  4. android 资源如何查找(AaptAssets)分析
  5. Android线程与ANR
  6. Android布局优化之merge(二)
  7. Kotlin生态调查:超过6成的开发者用过Kotli
  8. Android-NDK开发之基础--Android(安卓)JN
  9. android 拍照图片旋转问题
  10. CrossWalk - android 动态加载so库文件实