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

本文深入探讨了Android 4.4 Launcher中的DragScroller接口及其主要方法,以及DragController类的功能,包括触摸事件处理、DragView的创建和移动图标的行为。在DragController的startDrag方法中,详细分析了图标拖动过程,并解释了不同触摸状态下的响应逻辑。此外,还讨论了DragController如何在不同触摸事件(down, move, up, cancel)中处理拖动操作。" 110361331,10293347,DJM-S11:新一代2通道触摸屏混音器,"['android oboe', '混音', 'DJ技术', '音乐制作', '触屏设备']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、DragScroller

DragScroller是一个接口,顾名思义是控制滑动的接口,它定义了4个方法

public interface DragScroller {
  	/**
	 * 左滑
	 */
	void scrollLeft();
    
	/**
	 * 右滑
	 */
    void scrollRight();

    /**
     *进入滑动区域
     */
    boolean onEnterScrollArea(int x, int y, int direction);

    /**
     *退出滑动区域
     */
    boolean onExitScrollArea();
}
想具体分析它还是要结合WorkSpace和DragController,

二、DragController

DragController是一个类,不继承任何父类,内部提供了一个接口DragListener

interface DragListener {

        void onDragStart(DragSource source, Object info, int dragAction);

        void onDragEnd();
    }

onDragStart————拖动图标开始时执行的方法

onDragEnd———— 拖动图标结束时执行的方法

DragController是处理拖动图标的类,那么我们自然得关注它的触摸事件.拖动图标的流程是这样的


Launcher和WorkSpace后面会详解,大家目前只要知道这个流程即可.Launcher的onLongClick事件会调用WorkSpace的startDrag方法,startDrag方法会调用beginDragShared方法, beginDragShared方法最终调用DragController的startDrag方法.好,我们先看下这个startDrag方法.

 /**
 	 * @param b            拖动对象的图像,有可能会被缩放
	 * @param dragLayerX   拖动对象的图像x坐标
	 * @param dragLayerY   拖动对象的图像y坐标
	 * @param source       发起拖动的对象
	 * @param dragInfo     被拖动对象的数据
	 * @param dragAction   拖放的动作:移动或者复制
	 * @param dragRegion   拖动对象bitmap的区域  
	 */
      public void startDrag(Bitmap b, int dragLayerX, int dragLayerY,
            DragSource source, Object dragInfo, int dragAction, Point dragOffset, Rect dragRegion,
            float initialDragViewScale) {
    	
    	  if (PROFILE_DRAWING_DURING_DRAG) {
            android.os.Debug.startMethodTracing("Launcher");
        }
         // 隐藏软键盘
    	  if(mInputMethodManager == null) {
            mInputMethodManager = (InputMethodManager)
                    mLauncher.getSystemService(Context.INPUT_METHOD_SERVICE);
         }
        mInputMethodManager.hideSoftInputFromWindow(mWindowToken, 0);

     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值