1. 程式人生 > >判斷在左右邊界時是否繼續滑動的ViewPager

判斷在左右邊界時是否繼續滑動的ViewPager

最近專案比較忙,一個專案接著一個專案,遇到的問題也不少,其中有一個需求是要實現ViewPager的兩級聯動,在ViewPager處於邊界的時候,繼續滑動,標題要進行切換,大概想了一下不是很複雜,簡單的實現一下.

一、需求分析

需要在ViewPager在邊界的時候,繼續滑動時做出處理,可以通過判斷當前是否是邊界頁面的時候對點選滑動的距離進行記錄,來通過滑動的值判斷方向從而確定是否是邊界滑動,設定一個臨界值來判斷是否為滑動,最後確認為邊界滑動後通過回撥來進行後續操作.

二、程式碼實現

程式碼不是很複雜,直接貼程式碼了


import android.content.Context;
import
android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /** * Created by junweiliu on 16/9/20. */ public class SideViewPager extends ViewPager { /** * 開始點選的位置 */ private int startX; /** * 臨界值 */ private int criticalValue = 200
; /** * 邊界滑動回撥 */ public interface onSideListener { /** * 左邊界回撥 */ void onLeftSide(); /** * 右邊界回撥 */ void onRightSide(); } /** * 回撥 */ private onSideListener mOnSideListener; /** * 設定回撥 * * @param
listener */
public void setOnSideListener(onSideListener listener) { this.mOnSideListener = listener; } /** * 設定臨界值 * * @param criticalValue */ public void setCriticalValue(int criticalValue) { this.criticalValue = criticalValue; } public SideViewPager(Context context) { this(context, null); } public SideViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) event.getX(); break; } return super.dispatchTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: if (startX - event.getX() > criticalValue && (getCurrentItem() == getAdapter().getCount() - 1)) { if (null != mOnSideListener) { mOnSideListener.onRightSide(); } } if ((event.getX() - startX) > criticalValue && (getCurrentItem() == 0)) { if (null != mOnSideListener) { mOnSideListener.onLeftSide(); } } break; default: break; } return super.onTouchEvent(event); } }

需要注意的是,獲取開始點選的位置時,要在dispatchTouchEvent或者onInterceptTouchEvent中去獲取,在onTouchEvent中是獲取不到值的,這是因為點選事件分發的原因,有很多關於這方面的文章,有興趣可以去看一下.

具體使用的話也很簡單,實現回撥方法即可

mViewPager.setOnSideListener(new SideViewPager.onSideListener() {
            @Override
            public void onLeftSide() {
               // 左邊界滑動時處理
               ...
            }

            @Override
            public void onRightSide() {
                 // 右邊界滑動時處理
               ...
            }
        });

相關推薦

判斷左右邊界是否繼續滑動ViewPager

最近專案比較忙,一個專案接著一個專案,遇到的問題也不少,其中有一個需求是要實現ViewPager的兩級聯動,在ViewPager處於邊界的時候,繼續滑動,標題要進行切換,大概想了一下不是很複雜,簡單的實現一下. 一、需求分析 需要在ViewPager在邊界的

Android:禁止viewpager左右滑動,去除viewpager切換動畫,解決viewpager與百度地圖滑動衝突

Android自定義viewpager,禁止viewpager左右滑動,去除viewpager切換時動畫,解決viewpager與百度地圖滑動衝突 public class CustomViewPager extends ViewPager { private boolean e

android 判斷左右滑動,上下滑動的GestureDetector簡單手勢檢測

rst 手勢檢測 stat out util androi gen bool ide 直接加入監聽GestureDetector放在需要判斷滑動手勢的地方: 1 import android.app.Activity; 2 import android.os.Bu

scrollView 判斷左右滑動方法

經常會用到scrollView 判斷左右滑動還是上下滑動,判斷的方法如下 float lastContentOffset; - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

ViewPager滑動到最後一頁繼續滑動

package demo.com.viewpagerdemo; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import a

RecyclerView裡巢狀ViewPager,滾動RecyclerView,記住之前ViewPager滑動後的位置

如果是ListView裡巢狀ViewPager的話,首先要考慮的是豎向滑動和橫向衝突的問題,RecyclerView的話,不用考慮此問題 方法: 準備一個map來儲存你滑動過的ViewPager所在的RcyclerView中的位置和你滑動Vie

javascript中判斷變量變量值為 0 的特殊情況

div 結果 blog java javascrip var 出錯 平時 pre   有時候我們在js中會直接判斷變量是否存在值,下面列舉一些情況: var a = 0; var b = 1; var c = ‘ ‘; var d; console.log( a ? 1

判斷是否快速點擊或者滑動

last 是否 true fas false turn fast lean als long lastClickTime ;private boolean isFastDoubleClick() { long time = System.currentTimeMilli

關於含RecyclerView的fragment來回切換頁面自動滑動到底部的解決方法

get 切換 屬性 odi encoding 1.0 linear UC div 原因: 在fragment中來回切換時RecyclerView獲得了焦點,而RecyclerView的 focusableOnTouchMode屬性默認是true,所以在切換時Recycler

PCB Genesis加郵票孔(郵票孔增加方向判斷--左右上下)實現算法

角度 之前 用戶 如果 實現 size 進展 是否 分享 之前沒解決的問題,當時一下卡在用戶界面選擇郵票孔增加的方向(上下左右) 與郵票孔實際方位之前的邏輯與非判斷上卡殼了,導致一下沒進展下去。 回頭看原來如此簡單 ,將此點記錄一下。 1.垂直線定義:80--100 或

簡單實現Activity退出向下滑動退出的效果

先放圖(順便吐槽一下,ubuntu下想錄制gif還真是麻煩......)                              

pygame 繪製移動矩形,並碰到邊界改變顏色

import pygame,sys; from pygame.locals import * pygame.init() screen = pygame.display.set_mode((700,600)) pygame.display.set_caption("Drawi

淘寶商品圖片最後一個 繼續滑動檢視圖文詳情

@Override public void onPageScrolled(int arg0, float arg1, int arg2) { CommUtil.logD(TAG, "onPageScrolled(" + arg0 + "," + arg1 + "," + arg2

使用Eclipse自帶的工具檢測和資料庫連線成功

1.第一步 找到 Data Source Explorer 並 new 1.1如果沒有找到 Data Source Explorer 可根據如圖找: 2.第二步 選中自己要連線的資料庫 3.第三步 4.第四步 選中資料庫版本

Vue 彈出層 禁止頁面滑動

上程式碼 /***滑動限制***/ stop(){ var mo=function(e){e.preventDefault();}; document.body.style.overflow='hidden'; documen

實現螢幕切換、滑動-ViewPager詳解(二)之--------PagerTitleStrip與PagerTabStrip新增標題欄

PagerTabStrip 1.PagerTabStrip概述:(API解釋) PagerTabStrip是ViewPager的一個關於當前頁面、上一個頁面和下一個頁面的一個非互動的指示器。它經常作為ViewPager控制元件的一個子控制元件被被新增

使用swiper 輪播外掛ajax 請求載入圖片,無法滑動

因為banner圖是動態建立的,在外掛開始初始化時,文件流中沒用圖片,故沒有建立相應寬度,通過調整js載入順序,問題還是沒有解決。最後找到swiper外掛 api 有屬性是可以根據內容變動,自動初始化外掛的,新增observer:true後問題解決! var mySw

ABAP 如何判斷呼叫smartforms是進行列印還是預覽

CALL FUNCTION l_fncname       IMPORTING         job_output_options   = option"輸出引數       TABLES         gt_item              = lt_tmp       EXCEPTIONS     

自定義控制元件,判斷子控制元件是否可以滑動

當我們自定義拖拽控制元件時,比如下拉重新整理,其中的子控制元件可能是ListView,ScrollView,RecyclerView。當拖拽時,我們很想知道子控制元件是否滑動到頂部或者底部。現在給大家提供一個方法,希望可以幫到大家。 public boolea

第三個引導頁新增button按鈕(滑動viewpager

我們今天所說的是在專案的歡迎頁的中最後一頁的button點選事件 第一種:如果說是歡迎頁都是一張圖片的話,最後一頁的按鈕還得我們自己來新增的話,那麼我們只需在佈局里弄上一個viewpager和button的控制元件 <?xml version=