简单拖动效果(带Cache,需要完善)

来源:互联网 发布:武汉网络抢单软件 编辑:程序博客网 时间:2024/05/29 11:15
如何去实现一个具有幻象的拖拽效果? 
所谓”幻象“就是当你按下去拖动一个View时,View本身不动,拖动的是这个View的复制品,当抬起时真正的View才显示到拖动的地方。 
复制品很容易解决,2句代码就可以了: 
v.setDrawingCacheEnabled(true); 
Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache()); 

Java代码  收藏代码
  1. package com.ql.app;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.MotionEvent;  
  7. import android.view.View;  
  8. import android.view.View.OnTouchListener;  
  9. import android.widget.Button;  
  10. import android.widget.FrameLayout;  
  11. import android.widget.ImageView;  
  12. import android.widget.FrameLayout.LayoutParams;  
  13.   
  14. /** 
  15.  * 参考:http://techdroid.kbeanie.com/2010/04/simple-drag-n-drop-on-android.html 
  16.  * @author admin 
  17.  * 
  18.  */  
  19. public class App extends Activity implements OnTouchListener{  
  20.     private final static int START_DRAGGING = 0;  
  21.     private final static int STOP_DRAGGING = 1;  
  22.   
  23.     private Button btn;  
  24.     private FrameLayout layout;  
  25.     private int status;  
  26.     private LayoutParams params;  
  27.   
  28.     private ImageView image;  
  29.   
  30.     /** Called when the activity is first created. */  
  31.     @Override  
  32.     public void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         setContentView(R.layout.main);  
  35.   
  36.         layout = (FrameLayout) findViewById(R.id.layout);  
  37.         // layout.setOnTouchListener(this);  
  38.   
  39.         btn = (Button) findViewById(R.id.btn);  
  40.         btn.setDrawingCacheEnabled(true);  
  41.         btn.setOnTouchListener(this);  
  42.   
  43.         params = new LayoutParams(LayoutParams.WRAP_CONTENT,  
  44.                 LayoutParams.WRAP_CONTENT);  
  45.   
  46.     }  
  47.   
  48.     @Override  
  49.     public boolean onTouch(View view, MotionEvent me) {  
  50.         switch (me.getAction()) {  
  51.         case MotionEvent.ACTION_DOWN:  
  52.             status = START_DRAGGING;  
  53.             image = new ImageView(this);  
  54.             image.setImageBitmap(btn.getDrawingCache());  
  55.             layout.addView(image, params);  
  56.             break;  
  57.         case MotionEvent.ACTION_MOVE:  
  58.             if (status == START_DRAGGING) {  
  59.                 image.setPadding((int) me.getRawX(), (int) me.getRawY(), 00);  
  60.                 image.invalidate();  
  61.             }  
  62.             break;  
  63.         case MotionEvent.ACTION_UP:  
  64.             status = STOP_DRAGGING;  
  65.             Log.i("Drag""Stopped Dragging");  
  66.               
  67. //          layout.removeView(image);  
  68.             break;  
  69.   
  70.         default:  
  71.             break;  
  72.         }  
  73.         return false;  
  74.     }  
  75. }  

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="fill_parent"  
  5.     android:id="@+id/layout"  
  6.     >  
  7.   
  8.     <Button android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"   
  10.         android:id="@+id/btn"  
  11.         android:text="Drag Me"  
  12.         />  
  13. </FrameLayout>