Android4.4-Launcher源码分析系列之关键的类和接口之DropTarget、DragSource
来源:互联网 发布:淘宝上买电影票能用吗 编辑:程序博客网 时间:2024/05/17 22:15
一、DropTarget
DropTarget是一个接口,它定义了一个可以接收被拖动对象的对象,意思是说实现了这个接口的对象是一个可以放置被拖动对象的容器.
实现了这个接口的有ButtonDropTarget、Folder、Workspace三个.
它内部定义了一个DragObject类,声明了一些与拖动有关的属性
class DragObject {public int x = -1;public int y = -1;/** 触摸点到cell右上角的x位置 */public int xOffset = -1;/** 触摸点到cell右上角的y位置 */public int yOffset = -1;/** * 表示一个拖动操作是否在最后的状态,放下或者取消。和onDragExit不同, * 这个只有在当前拖动对象上拖动终结时或者拖动出了当前对象时才会产生 */public boolean dragComplete = false;/** 拖动的对象 */public DragView dragView = null;/** 与被拖动对象相关联的数据信息 */public Object dragInfo = null;/** 发起拖动的对象 */public DragSource dragSource = null;/** 顾名思义,调用拖动动画的Runnable */public Runnable postAnimationRunnable = null;/** 表示是否拖动操作已经被取消 */public boolean cancelled = false;/** * 拖动动画不停止,就不删除DragView */public boolean deferDragViewCleanupPostAnimation = true;public DragObject() {}}主要关注下它提供的以下四个方法
void onDragEnter(DragObject dragObject);void onDragOver(DragObject dragObject);void onDragExit(DragObject dragObject);void onDrop(DragObject dragObject);onDragEnter—————是图标拖动到一个DropTarget时的回调方法
onDragOver————— 是图标在上一次位置和这一次位置所处的DropTarget相同的时候的回调方法。
onDragExit —————是图标被拖出DropTarget时的回调方法。
onDrop —————是图标最终被放到一个DropTarget时的回调方法
我在WorkSpace类里加了实现这些方法的打印,当长按一个图标然后放下时会依次执行下列方法
前面已经说了,实现了DropTarget接口的有ButtonDropTarget、Folder、Workspace三个.Folder是文件夹类,Workspace是工作区类,那么ButtonDropTarget是什么呢?
我们看下它的源码
public class ButtonDropTarget extends TextView implements DropTarget, DragController.DragListener {
它是继承自TextView并实现了DropTarget接口,我们这里只关注它的子类InfoDropTarget和DeleteDropTarget.这两个子类分别是App info和删除类.如下图示
对应的显示是X Remove和App info.
它们都实现了onDragEnter、onDragOver、onDragExit、onDrop等四个方法.
大家应该发现了,在拖动图标到InfoDropTarget和DeleteDropTarget时,文本变了颜色.根据前面的定义,这些操作应该是在onDragEnter方法里进行的.我们进去看一下.
DeleteDropTarget的
public void onDragEnter(DragObject d) { super.onDragEnter(d); setHoverColor(); }InfoDropTarget的
public void onDragEnter(DragObject d) { super.onDragEnter(d); mDrawable.startTransition(mTransitionDuration); setTextColor(mHoverColor); }是在setHoverColor和setTextColor(mHoverColor)里改变的.其实setHoverColor点进去也是
private void setHoverColor() { mCurrentDrawable.startTransition(mTransitionDuration); setTextColor(mHoverColor); }很明显,我们只要改变这个mHoverColor值就可以,代码中是这样定义的
DeleteDropTarget
mHoverColor = r.getColor(R.color.delete_target_hover_tint);InfoDropTarget
mHoverColor = r.getColor(R.color.info_target_hover_tint);这两个颜色对应的正是原生的红色和蓝色.我们把它改为绿色和黄色验证一下.
至于图标也可以改,我这里就不说了.
接下来介绍下DragSource.
二、DragSource
DragSource是一个接口,意思是拖拽源,实现这个接口只有两个类:AppsCustomizePagedView和Workspace.
确实,只有这两个地方能拖动图标.DragSource只定义了三个方法.
public interface DragSource { boolean supportsFlingToDelete(); void onFlingToDeleteCompleted(); void onDropCompleted(View target, DragObject d, boolean isFlingToDelete, boolean success);}从这些方法的名字就很容易理解.
supportsFlingToDelete—————— 是否这个源支持猛的拖动items到删除框
void onFlingToDeleteCompleted——猛的拖一下items到删除框
onDropCompleted———————— 在拖动一个items完成时执行
DragSource就这些,没什么好讲的.
欢迎各位留言
- Android4.4-Launcher源码分析系列之关键的类和接口之DropTarget、DragSource
- Android4.4-Launcher源码分析系列之关键的类和接口之DragLayer
- Android4.4-Launcher源码分析系列之关键的类和接口之DragScroller、DragController
- Android4.4-Launcher源码分析系列之Launcher介绍
- Android4.4-Launcher源码分析系列之Launcher启动简介
- Android4.4-Launcher源码分析系列之概述
- Android4.4-Launcher源码分析系列之CellLayout
- SWT 的拖放操作,DragSource 和 DropTarget 与剪切板(Clipboard)
- Android4.4-Launcher源码分析系列之WorkSpace及屏幕滑动
- Android4.4-Launcher源码分析系列之搜索框/删除框
- Android4.4-Launcher源码分析系列之Launcher界面修改、壁纸替换、图标替换、修改滚动指示器
- Android4.0 Launcher源码分析系列(四)
- Android4.0 Launcher 源码分析系列
- Android4.0 Launcher 源码分析系列
- Android4.0 Launcher 源码分析系列(一)
- Android4.0 Launcher 源码分析系列(二)
- Android4.0 Launcher 源码分析系列(三)
- Android4.0 Launcher 源码分析系列(一)
- android studio插件
- 堆排序
- Android 功能引导
- Java关键字介绍之this与super
- 微软100题第5题
- Android4.4-Launcher源码分析系列之关键的类和接口之DropTarget、DragSource
- Android学习笔记-广播的使用(一)
- 去掉 vivado 自动添加的 bufg
- 干货阿里巴巴 开源软件列表
- 关于C# 装箱拆箱的理解
- Activity的启动模
- 利用广播机制判断当前网络状态
- java中常用英文术语含义归纳
- 打开Android studio弹出来"cannot lock system folders"框框的解决方法