Drag---長按控制元件進行拖動
阿新 • • 發佈:2019-02-20
import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.DragEvent; import android.view.Menu; import android.view.View; import android.view.View.DragShadowBuilder; import android.view.View.OnDragListener; import android.view.View.OnLongClickListener; public class MainActivity extends Activity { private View ViewD; private View ViewP; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findById(); setListener(); } private void setListener() { //設定監聽器,長按後拖動 ViewD.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View view) { ViewD.startDrag(null, new DragShadowBuilder(view), view, 0); return true; } }); //開始拖動時回撥的函式,setOnDragListener ViewP.setOnDragListener(new OnDragListener() { @Override public boolean onDrag(View mDropview, DragEvent event) { boolean result=false; switch (event.getAction()) { //開始拖動時 case DragEvent.ACTION_DRAG_STARTED:{ Log.e("Dragging", "View開始被拖動"); result=true; break; } //被拖動的額物件進入當前view物件時 case DragEvent.ACTION_DRAG_ENTERED:{ Log.e("Dragging", "被拖動的View物件進入當前的View"); break; } //被拖動的View進入當前的View後,位置改變時回撥 case DragEvent.ACTION_DRAG_LOCATION:{ Log.e("Dragging", "被拖動的view進入當前view"); break; } //拖動的View被放入當前的View時回撥 case DragEvent.ACTION_DROP:{ Log.e("Dragging", "拖動的View被放入當前View"); View mDragView=(View) event.getLocalState(); //得到拖動檢視的背景 Drawable mDragViewBackGround=mDragView.getBackground(); mDragView.setBackgroundDrawable(mDropview.getBackground()); mDropview.setBackgroundDrawable(mDragViewBackGround); break; } //拖動結束時 case DragEvent.ACTION_DRAG_ENDED:{ Log.e("Dragging", "View拖動結束"); break; } //拖動完成時 case DragEvent.ACTION_DRAG_EXITED:{ Log.e("Dragging", "View拖動退出"); break; } default :{ break; } } return result; } }); } private void findById() { ViewD=findViewById(R.id.ViewD); ViewP=findViewById(R.id.ViewP); } }