zoukankan      html  css  js  c++  java
  • 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(00, width, height);
            size.set(width, height);
            touch.set(width / 2, height / 2);
        }
     
        @Override
        public void onDrawShadow(Canvas canvas) {
            shadow.draw(canvas);
        }
    }
  • 相关阅读:
    冰思《L.M》
    Delphi 基本语法与操作《转》
    ADO实现单条记录的刷新《转》
    js正则限制input框输入的常用代码《转》
    Delphi 获取汉字的拼音首字母《转》
    baby one more time
    邮件/域名/DNS相关知识
    Visual Studio 2005 正式版(RTM) BT下载地址
    经典爱情十句话
    Asp中使用存储过程代码收集
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4803493.html
Copyright © 2011-2022 走看看