Android事件詳解——拖放事件DragEvent


1、Android拖放框架的作用?

    利用Android的拖放框架,可以讓用戶用拖放手勢把一個View中的數據移到當前layout內的另一個View中去。

 

2、拖放框架的內容?

    1)拖放事件類

    2)拖放監聽器

    3)其他輔助的方法和類

 

3、拖放過程?

    拖放過程有四個基本步驟:

    1)啟動 為了響應用戶開始拖動的手勢,需要調用View的startDrag方法來通知系統。startDrag方法的參數需要指定所拖動的數據、元數據和繪制拖動陰影的回調方法。

作為響應,系統首先通過回調來獲取拖動陰影,然后在設備上顯示這個陰影。

 

4、例子

長按某個View,進行拖動操作。

1)創建用於移動數據的ClipData和ClipData.Item。在ClipData對象中,需要給出存放元數據的ClipDescription對象。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private  static  final  String IMAGEVIEW_TAG =  "icon bitmap"
 
ImageView imageView =  new  ImageView( this );
imageView.setImageBitmap(mIconBitmap);
imageView.setTag(IMAGEVIEW_TAG);
 
     ...
 
imageView.setOnLongClickListener( new  View.OnLongClickListener() {
 
     public  boolean  onLongClick(View v) {
 
         ClipData.Item item =  new  ClipData.Item(v.getTag());
         ClipData dragData =  new  ClipData(v.getTag(),ClipData.MIMETYPE_TEXT_PLAIN,item);
         View.DragShadowBuilder myShadow =  new  MyDragShadowBuilder(imageView);
         v.startDrag(dragData,   // the data to be dragged
                     myShadow,   // the drag shadow builder
                     null ,       // no need to use local data
                     0           // flags (not currently used, set to 0)
         );
     }
});

 

2)定義MyDragShadowBuilder

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  private  static  class  MyDragShadowBuilder  extends  View.DragShadowBuilder {
 
     private  static  Drawable shadow;
 
     public  MyDragShadowBuilder(View v) {
         super (v);
         shadow =  new  ColorDrawable(Color.LTGRAY);
     }
 
     @Override
     public  void  onProvideShadowMetrics (Point size, Point touch) {
         private  int  width, height;
         width = getView().getWidth() /  2 ;
         height = getView().getHeight() /  2 ;
 
         shadow.setBounds( 0 0 , width, height);
         size.set(width, height);
         touch.set(width /  2 , height /  2 );
     }
 
     @Override
     public  void  onDrawShadow(Canvas canvas) {
         shadow.draw(canvas);
     }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM