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);
        }
    }
  • 相关阅读:
    腾讯QQ家族任意支付QB+修改资料csrf
    腾讯QQ积分CSRF导致积分任意挥霍(我的积分为什么少了)
    腾讯大湘网某处csrf(city.hn.qq.com)可投诉刷留言
    路由器下再连接一台路由器
    PHP安全之临时文件的安全
    通过NAT转发实现私网对外发布信息
    asp adodb.stream读取文件和写文件
    解决:ADODB.Stream 错误 '800a0bbc' 写入文件失败
    笑话一则
    spring-boot-2.0.3源码篇
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4803493.html
Copyright © 2011-2022 走看看