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