1. 程式人生 > >Android Launcher分析和修改6——頁面滑動(PagedView)

Android Launcher分析和修改6——頁面滑動(PagedView)

 public boolean onTouchEvent(MotionEvent ev) 
    {
        if(OWL_DEBUG) Log.d(OWL, "onTouchEvent  entering..");
     //........switch (action & MotionEvent.ACTION_MASK) 
        {
     //.........此處省略ACTION_DOWN和ACTION_MOVE
        case MotionEvent.ACTION_UP:
            if(OWL_DEBUG) Log.d(OWL, "
onTouchEvent ACTION_UP.."); if (mTouchState == TOUCH_STATE_SCROLLING) { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. TOUCH_STATE_SCROLLING"); final int activePointerId = mActivePointerId; final int pointerIndex = ev.findPointerIndex(activePointerId); final
float x = ev.getX(pointerIndex); final VelocityTracker velocityTracker = mVelocityTracker; velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); //橫向速率 int velocityX = (int) velocityTracker.getXVelocity(activePointerId);
//移動距離 final int deltaX = (int) (x - mDownMotionX); //頁面寬 final int pageWidth = getScaledMeasuredWidth(getPageAt(mCurrentPage)); //移動距離超過頁面寬40% boolean isSignificantMove = Math.abs(deltaX) > pageWidth *SIGNIFICANT_MOVE_THRESHOLD; final int snapVelocity = mSnapVelocity; mTotalMotionX += Math.abs(mLastMotionX + mLastMotionXRemainder - x); //根據滑動距離和速率,判斷是否是滑動 boolean isFling = mTotalMotionX > MIN_LENGTH_FOR_FLING && Math.abs(velocityX) > snapVelocity; // 這鐘情況是頁面朝一個方向移動了一段距離,然後又彈回去了。 //我們使用一個閥值來判斷是進行翻頁還是返回到初始頁面 boolean returnToOriginalPage = false; //Math.signum 函式將正數轉換為 1.0,將負數轉換為 -1.0,0 仍然是 0。 實際上,它只是提取一個數的符號 if (Math.abs(deltaX) > pageWidth * RETURN_TO_ORIGINAL_PAGE_THRESHOLD && Math.signum(velocityX) != Math.signum(deltaX) && isFling) { //返回當前頁面 returnToOriginalPage = true; } int finalPage;//頁面朝左移動 if (((isSignificantMove && deltaX > 0 && !isFling) || (isFling && velocityX > 0)) && mCurrentPage > 0) { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. TOUCH_STATE_SCROLLING LeftSnap"); finalPage = returnToOriginalPage ? mCurrentPage : mCurrentPage - 1; snapToPageWithVelocity(finalPage, velocityX); } //頁面朝右移動 else if (((isSignificantMove && deltaX < 0 && !isFling) || (isFling && velocityX < 0)) && mCurrentPage < getChildCount() - 1) { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. TOUCH_STATE_SCROLLING RightSnap"); finalPage = returnToOriginalPage ? mCurrentPage : mCurrentPage + 1; snapToPageWithVelocity(finalPage, velocityX); } else { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. TOUCH_STATE_SCROLLING Back Origation"); //尋找離螢幕中心最近的頁面移動 snapToDestination(); } } else if (mTouchState == TOUCH_STATE_PREV_PAGE) { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. TOUCH_STATE_PREV_PAGE"); //直接切換到上一頁,沒有進行滑動 int nextPage = Math.max(0, mCurrentPage - 1); if (nextPage != mCurrentPage) { snapToPage(nextPage); } else { snapToDestination(); } } else if (mTouchState == TOUCH_STATE_NEXT_PAGE) { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. TOUCH_STATE_NEXT_PAGE"); //直接切換到下一頁 int nextPage = Math.min(getChildCount() - 1, mCurrentPage + 1); if (nextPage != mCurrentPage) { snapToPage(nextPage); } else { snapToDestination(); } } else { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent ACTION_UP.. onUnhandledTap()");
         //這裡是空回撥,繼承PagedView的方法,會過載這方法處理一些操作。 onUnhandledTap(ev); } mTouchState
= TOUCH_STATE_REST; mActivePointerId = INVALID_POINTER; releaseVelocityTracker(); break;return true; }

相關推薦

Android Launcher分析修改6——頁面滑動(PagedView)

public boolean onTouchEvent(MotionEvent ev) { if(OWL_DEBUG) Log.d(OWL, "onTouchEvent entering..");      //........switch (action &

Android Launcher分析修改3 Launcher啟動初始化

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android Launcher分析修改1——Launcher預設介面配置(default_workspace)

//Edited by mythou // //傳入default_workspace檔案的資源ID和資料庫實力,把xml裡面資料解析,儲存到Launcher資料庫。返回總共解析了多少個標籤。 private int loadFavorites(SQLiteDatabase db, int workspa

Android Launcher分析修改13——實現Launcher編輯模式(1) 桌布更換

  已經很久沒更新Launcher系列文章,今天不分析原始碼,講講如何在Launcher裡面新增桌面設定的功能。目前很多第三方Launcher或者定製Rom都有簡單易用的桌面設定功能。例如小米MIUI的Launcher就有很豐富編輯功能。今天開始會講一下如何實現桌面編輯功能。網上對於實現Launcher一些編

Android Launcher分析修改2——Icon修改、介面佈局調整、桌布設定

<!-- Workspace cell size --> <dimen name="workspace_cell_width_land">88dp</dimen> <dimen name="workspace_cell_width_port">

Android Launcher分析修改8——AllAPP介面拖拽元素(PagedViewWithDraggableItems)

  接著上一篇文章,繼續分析AllAPP列表介面。上一篇文章分析了所有應用列表的介面構成以及如何通過配置檔案修改屬性。今天主要是分析PagedViewWithDraggableItems類,因為在我們分析AppsCustomizePagedView之前,需要先了解PagedViewWithDraggableI

Android Launcher分析修改7——AllApp全部應用列表(AppsCustomizeTabHost)

  今天主要是分析一下Launcher裡面的所有應用列表。Android4.0 Launcher的所有應用列表跟2.X比較大的區別就是多了Widget的顯示。下面會詳細分析Launcher裡面有關所有應用列表配置和程式碼分析。   1、AllApp列表配置檔案 配置AllAPP應用列表介面的配置檔案

Android Launcher分析修改11——自定義分頁指示器(paged_view_indicator)

  Android4.0的Launcher自帶了一個簡單的分頁指示器,就是Hotseat上面那個線段,這個本質上是一個ImageView利用.9.png圖片做,效果實在是不太美觀,用測試人員的話,太醜了。特別是搭配其他風格的圖示和背景,的確不好看。所以打算自己重新寫一個指示器。這個所謂的分頁指示器作用很簡單,

Android Launcher分析修改10——HotSeat深入進階

  void addInScreen(View child, long container, int screen, int x, int y, int spanX, int spanY, boolean insert) { if(OWLLaunche

Android Launcher分析修改9——Launcher啟動APP流程

  本來想分析AppsCustomizePagedView類,不過今天突然接到一個臨時任務。客戶反饋說機器介面的圖示很難點選啟動程式,經常點選了沒有反應,Boss說要優先解決這問題。沒辦法,只能看看是怎麼回事。今天分析一下Launcher啟動APP的過程。從使用者點選到程式啟動的流程,下面針對WorkSpac

Android Launcher分析修改5——HotSeat分析

void resetLayout() {    //清空原來的內容 mContent.removeAllViewsInLayout(); //新增AllAPP按鈕,也是一個BubbleTextView物件 Context context = g

Android Launcher分析修改4——初始化載入資料

private void bindWorkspace() {       //通知Launcher開始繫結資料 mHandler.post(new Runnable() { public void run() {

Android Launcher分析修改3——Launcher啟動初始化

@Override protected void onCreate(Bundle savedInstanceState)   { super.onCreate(savedInstanceState); //獲取Application 例項 La

Android Launcher分析修改12——Widget列表資訊收集

public void syncWidgetPageItems(final int page, final boolean immediate) { int numItemsPerPage = mWidgetCountX * mWidgetCountY; //

Kali Linux Web滲透測試手冊(第二版) - 2.6 - 使用瀏覽器自帶的開發工具來做基本的分析修改

翻譯來自:掣雷小組 成員資訊: thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt, 這個公眾號,一定要關注哦,慢慢會跟上面老哥們一起分享很多幹貨哦~~ 第二章:偵察 介紹 2.1、被動資訊收集 2.2、使用Recon-ng收集資訊 2.3、

android之ViewPager簡單實現區域性頁面滑動效果

-Viewpager能實現什麼效果? -實現左右滑動,切換view的效果。 -既可以實現整個頁面左右滑動,也可以實現同一個頁面中區域性左右滑動。 搞清楚viewpager的作用後,開始寫一個簡單例子,實現同一個頁面中區域性滑動的效果。 在coding前要做的準備工作 2

Android記憶體分析調優(上)

PID    Vss        Rss        Pss       Uss      cmdline ...... 2319 42068K 42032K 13536K 7028K com.xxx ...... 該命令可以列出當前系統所有程序的記憶體佔用情況。 PID是程序ID。 Vss是佔用的虛擬

Android記憶體分析調優

在前文中討論瞭如果使用adb shell procrank, dumpsys meminfo和showmaps分析程序的記憶體佔用情況。 本文將繼續細化,具體分析導致記憶體過大的dalvik heap。 Dalvik heap分析和優化 Dalkvik heap是最常見的android應用記憶體優化的物件。

解決android中viewpager內嵌html滑動事件衝突

           這幾天專案迭代,有個大的板塊是整體套用H5來做。由於H5裡還有好多小模組,需要一個滑動切換的效果,而android端只是提供一個空的fragment,佔據著viewpager的一個板塊。最開始的效果滑動起來分外尷尬。。           解決思路是這

Android Launcher 分析

1. Launcher的啟動過程 從網路上找了一段關於Launcher的啟動過程的文章,作為學習Launcher的背景知識: Linux kernel啟動以後會通過app_main程序來初始化android Runtime Java執行環境,而zygote是Andro