日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android4,flutter插件引用第三方库

發布時間:2023/12/20 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android4,flutter插件引用第三方库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Workspace的beginDragShared方法

從上文中可以發現,只要是在Workspace上啟動物體的拖拽,最終都會走到Workspace.beginDragShared方法里。在這個方法中,首先會通過createDragBitmap繪制用于拖拽的圖形(包括在原圖外層繪制一圈紅色邊界),然后計算位置與邊界,并將其傳給DragController管理。

從AppsCustomizePagedView中選擇一個應用或Widget放置到Workspace上


AppsCustomizePagedView繼承自PagedViewWithDraggableItems,即我們平時所說的應用程序抽屜。當長按應用圖標或widget時,AppsCustomizePagedView會隱藏,顯示Workspace的縮小狀態,即SPRING_LOADED。

在源碼中,該狀態轉換有三個入口,均在PagedViewWithDraggableItems中給出,即onInterceptTouchEvent、onTouchEvent與onLongClick。最終都轉到AppsCustomizePagedView的b

《Android學習筆記總結+最新移動架構視頻+大廠安卓面試真題+項目實戰源碼講義》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整內容開源分享

eginDragging方法。但筆者試了多次,發現只有onLongClick被調用。

AppsCustomizePagedView的beginDragging

beginDragging類似一個代理方法,首先進行Launcher狀態的轉換,然后會根據被拖拽物的不同,調用不同的拖拽方法。

應用程序的拖拽beginDraggingApplication

對于應用程序來說,從抽屜拖拽到桌面,界面的隱藏在beginDragging中都已經處理好了,AppsCustomizePagedView不需要保存任何有關被拖拽應用的信息(就算取消拖拽,也只需要重新顯示AppsCustomizePagedView就行了,不像Folder那樣還需要恢復快捷方式)。因此,只需要通知Workspace繪制圖標邊界,然后啟動拖拽即可。

Widget/快捷方式的拖拽beginDraggingWidget

對于Widget列表中的元素,由于有可能為快捷方式,因此還需要進行判斷。對不同類型的拖拽物,用不同的方式繪制圖形及圖標邊界。

DragController

==============

startDrag開始拖拽


從上文可以發現,無論是以何種方式進入拖拽,最終都是調用DragController的startDrag方法進行處理。

在DragController中,startDrag是個多態方法,但最終,都走到了以下這個實現中。

Java代碼??

  • public?void?startDrag(Bitmap?b,?int?dragLayerX,?int?dragLayerY,

  • DragSource?source,?Object?dragInfo,?int?dragAction,

  • Point?dragOffset,?Rect?dragRegion)

  • startDrag的邏輯比較清晰,主要是通知相應的監聽器拖拽開始,然后創建拖拽對象及其視圖,將其移動到當前觸摸到位置。

    觸屏事件的攔截


    onInterceptTouchEvent

    DragLayer繼承自ViewGroup,其onInterceptTouchEvent方法若返回true,說明需要攔截觸屏事件,則后續的一系列事件將傳遞給自身的onTouchEvent方法,而不再向其子控件傳遞。

    DragController的onInterceptTouchEvent由DragLayer的onInterceptTouchEvent調用,用于攔截觸屏事件的處理。當用戶點擊屏幕時,觸發ACTION_DOWN事件,記錄當前觸摸位置。當抬起時,觸發ACTION_UP事件,結束拖拽。若抬起時處于拖拽中,在當前位置釋放被拖拽物(在筆者測試過程中未檢測到其調用)。最后,返回是否處于拖拽狀態。

    因此,若此時處于拖拽中,后續的觸屏事件將只傳遞到DragLayer的onTouchEvent。

    onTouchEvent

    onTouchEvent由于處理觸屏事件,若返回true,則表示消費掉該事件,事件不再向父控件的onTouchEvent傳遞。

    DragController的onTouchEvent由DragLayer的onTouchEvent調用,用于處理被拖拽物的移動。

    當startDrag執行完畢,DragController設置拖拽狀態為true,這樣,觸屏事件將最終轉到onTouchEvent中,在此處調用handleMoveEvent進行物體的移動。其基本流程如下。

    handleMoveEvent進行移動


    handleMoveEvent是拖拽的主要方法,當用戶觸發拖拽后,DragController將通過該方法移動被拖拽物視圖,并通知各個釋放目的對象相應狀態的改變。若進入滑屏區域且允許滑屏,執行相應的滑屏操作。如下圖所示。

    drop釋放被拖拽物到當前位置


    改變。若進入滑屏區域且允許滑屏,執行相應的滑屏操作。如下圖所示。

    [外鏈圖片轉存中…(img-KumvFWdp-1637897879843)]

    drop釋放被拖拽物到當前位置


    總結

    以上是生活随笔為你收集整理的Android4,flutter插件引用第三方库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。