Android4.4-Launcher源码分析系列之关键的类和接口之DropTarget、DragSource

原创 2016年06月01日 09:13:29

一、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就这些,没什么好讲的.

欢迎各位留言



版权声明:本文为博主原创文章,转载请注明出处:邓志勇博客 http://blog.csdn.net/qq_31530015/

相关文章推荐

Android4.4-Launcher源码分析系列之关键的类和接口之DragScroller、DragController

一、DragScroller DragScroller是一个接口,顾名思义是控制滑动的接口,它定义了4个方法 public interface DragScroller { /** * 左...

第五部分:IDropTarget实现

这一节我们讲如何来实现一个自己的Drop Target,我们需要实现IDropTarget接口。 1.如何成为一个"Drop Target" 为了使窗体能接收拖放的数据,窗口必须注册为drop目标...

JSON 概念

JSON概念 JSON是什么?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(St...

Android4.4-Launcher源码分析系列之搜索框/删除框

一、搜索框/删除框简介 搜索框在手机桌面上方,当拖动一个快捷方式图标时就会隐藏搜索框并且显示删除框.如下图所示 二、搜索框/删除框布局   屏幕上方的搜索和删除框是在一个布局里,名称为qsb...

CTI中间件产品有前途吗

整个CTI市场都日暮西山,何况中间件产品?不看好的原因有:1.CTI原本是为电话语音而设计的,现在互联网深入人们的生活,获取信息的渠道更多更方便,语音通信萎缩了。技术的发展方面,SIP一定会占据主流,...

Android4.4-Launcher源码分析系列之Launcher介绍

一.Launcher是什么 Launcher是启动器的意思,最直观的就是手机上的桌面.其实它是个Activity. public class Launcher extends Activity...

Android4.4-Launcher源码分析系列之Launcher界面修改、壁纸替换、图标替换、修改滚动指示器

一、Launcher加载布局的基本流程 Launcher界面的内容展现是由default_workspace.xml决定的,它决定了每个屏幕显示的内容和布局.位于res\xml目录下.它是在Laun...

Android4.1标准桌面应用(Launcher2)分析之Android.mk

在接下来几篇文章里,我将针对Android4.1中的Launcher2应用进行解析。对应用中涉及到的相关技术点进行分析整理。 「Launcher2是什么?」 Launcher2是Anroi...

Android4.4-Launcher源码分析系列之WorkSpace及屏幕滑动

一.WorkSpace是什么 前面已经介绍了一个WorkSpace包含了多个CellLayout,再回忆下之前画过的图 WorkSpace是一个ViewGroup,它的布局如下 <com.a...

Android4.4-Launcher源码分析系列之关键的类和接口之DragLayer

一、DragLayer布局 上一篇文章分析过Launcher的布局,它是最外层的布局 <FrameLayout xmlns:android="http://schemas.android.com/...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)