當前位置:首頁 » 安卓系統 » android自定滑動

android自定滑動

發布時間: 2023-02-15 13:36:46

① android 自定義View中滑動操作防止超出邊界的簡便方法

在android開發中,自定義View中經常會用到滑動操作,肯定要防止滑動超出邊界。這里是一個防止滑出邊界非常簡便的一個方法。

計算左右邊界X或上下邊界Y的值,如果不超出屏幕,左邊邊界與頂部邊界是0,右邊與底部邊界是屏幕寬高度。然後重寫scrollTo方法:

@Overridepublic void scrollTo(int x, int y) { 

    ​if(x>mRightOffsetX) x=mRightOffsetX; 

    ​if(x<mLeftOffsetX) x=mLeftOffsetX; 

    ​super.scrollTo(x, y);

}

② Android | 自定義上拉抽屜+組合動畫效果

話不多說先來個效果圖看一下

實現的主要功能就是上拉抽屜(解決了子view的滑動沖突)+ 邊緣動畫 + 中間小球和seekbar效果動畫。黃色部分就是上拉抽屜整體,綠色部分是橫向的recyclerview。有個朋友說有阻尼效果就完美了 ... 因為效果圖沒有阻尼效果,所以就沒有去研究 - -!

頂部也可以放個圖片,像醬紫

圓形中間也可以放圖片和文字,上下滑動的時候內部圖片和文字也會隨之改變,其實原理都是一樣的,一個會了你放啥都行,文章後面也會介紹。
效果就是醬紫

抽屜里我放的是LinearLayout,然後動態添加了多個可以橫向滾動的RecyclerView,上滑下滑左滑右滑輕松無壓力~~就是這么刺激

效果介紹完了,下面我們看一下如何實現的

在當前demo里

到這里就可以實現如效果圖一樣的滾動效果了

這樣看就比較直觀些
這個就是用貝塞爾曲線畫的簡單的一個效果

我這里是用了兩個三階貝塞爾曲線,從中間分開,左邊一個右邊一個,然後吧這個視圖上下分為一半,中間的點不變,兩邊的高度增加,兩邊是扇形畫的圓角,然後lineto畫成封閉圖形,這樣就出現了如上圖所示的動畫效果。

這部分大家應該就比較熟悉,自定義view經常會用到,用法就不多說了,記錄一下中間圖片隨之縮放和透明改變的寫法

然後再動畫中不斷改變圓和圓環的半徑、圖的尺寸、畫筆透明度,就能達到效果

抽屜的弧度、圓、圓環和圖片這些的改變主要是監聽當前上滑的距離和需要上滑的距離做的百分比計算的然後相應的隨之改變。

是在父view的滾動監聽里做的改變,topHeight就是抽屜需要滾動的距離。

之前接觸的動畫都是單獨的模塊,直接開始結束的那種,像這次這樣需要動態改變而且多個結合的還是第一次遇到(渣渣本渣沒錯了),所以也是在邊學邊寫,可能有很多地方寫的不是很恰當,也是希望大佬可以指出,共同學習共同進步。其實現在的效果是大改過一次的,最初貝塞爾曲線高度取的整個高度,然後改變中間的那個點向下凹,但是外面的圓又要正好一半在他的上方一半在下方,這樣的位置其實是不好做適配的,所以就改成了現在的這樣。通過這個動畫的實現,自己不僅是在自定義view、動畫還是一些思考方式上都有所進步,這是挺重要的。項目中還有另一個動畫,就下篇再講吧~

gitee項目地址
https://gitee.com/yoyo666/TopScrollView.git

③ Android 滑動漸變的TitleBar

首先看下效果

進入頁面後,是一個列表和頂部是一張圖片的布局,滑動列表, TitleBar 隨著上下滑動而"若隱若現"。感覺是不是像 CoordinatorLayout CollapsingToolbarLayout 的效果

其實不太一樣, CoordinatorLayout CollapsingToolbarLayout 的實現效果更多,並且Gradle需要單獨引入Support包

第一個的效果,只要是 ScrollView ListView RecycleView 都可以實現

以ListView為例,首先ListView設置數據,添加Header,然後設置滑動事件

ScrollViewAlphaListener 是自定義的滑動Listener。 setAlphaView 方法分別設置了: 上下文對象 頂部圖片 根布局 ~

看下ScrollViewAlphaListener的主要內容

ScrollViewAlphaListener 是 implements AbsListView.OnScrollListener,所以必須實現其 onScroll 方法。在 onScroll 方法中根據頂部圖片的位置高度和根布局滑動Y值,算出Alpha值。當然這里也考慮了 狀態欄的高度(ExtendUtils.getStatusBarHeight(mContext))

最後在 ScrollViewAlphaListener 的回調中,處理對應View的漸變效果

這樣就實現了滑動漸變的效果TitleBar了~ ScrollView RecycleView 的實現都是根據頂部圖片和根布局滑動的Y值來計算的,大同小異~

④ Android (基礎自定義組件)viewpagertap滑動器

視頻地址: http://www.imooc.com/learn/615

2.1.1主要定義畫筆、三角形使用path來實現。接著定義三角形的大小(寬高)以及初始化位置。
2.1.2設置mInitTranslationX參數,表示三角形初始化的位置,相當於marginLeft,計算方式是:
mInitTranslationX = 一個tab的寬度 - 三角形寬度的/2
2.1.3設置mTranslationX參數,表示每一移動一個tab時,三角形需要平移的寬度,如圖:

2.1.4 mTabVisibleCount,自定義屬性,布局中要顯示幾個tab,如上圖4個tab

2.2.1構造中主要獲取自定義屬性值,默認為4;以及設置畫筆

2.3.1三角形的寬度 = 一個tab寬度的1/6;如果覺得寬度的大小不合適, 可以改變1/6這個常量的比例

2.3.2三角形的高度 = 高度/2如圖:

2.4.1重寫父類dispatchDraw方法,此方法在invalidate()時,會重新執行
2.4.2通過 canvas.translate()設置三角形所在位置;X軸(上去看2.1.3),Y軸為但前組件的高度(最底部)。以及調用drawPath()方法使用畫筆。

2.5.1如標題主要是通過viewpager的position和positionOffset來計算mTranslationX的值;再通過scrollTo方法來平移但前組件,最後通過invalidate()方法重繪布局
2.5.2剩下的就是一些演算法和邏輯判斷

2.6.1獲取viewpager,監聽viewpager的滑動事件,自定義setScroll方法(2.5的方法)將但前position和滑動偏移量傳進去
2.6.2在此次以及監聽的viewpager的滑動事件,如果外界也需要監聽當前viewpager的話,會起沖突;此時就需要設置回調,對外提供介面
2.6.3setTextHighLight()方法設置選中的tab為高亮顏色

2.7.1獲取list集合,將每一個item設置成一個textview,再通過setTextItemOnclickEvent()方法設置點擊事件

3.1app:visible_tab_count自定義屬性;如果不設置默認為自定義組件的COUNT_TAB_VISIBLE變數值

http://pan..com/s/1qYGUTAW

http://pan..com/s/1slpi5v3

⑤ android怎麼實現頁面的左右滑動

Android上有一個控制項叫做ViewPager,該控制項可以根據item的多少實現左右滑動的效果。
Android上還有一個東西叫做Fragment,這是一個依賴於Activity而又獨立的頁面。
綜合這兩個控制項的特性,可以使用ViewPager+Fragment的方式,即在ViewPager里嵌入Fragment的方式,實現頁面左右滑動的效果。

⑥ android 自定義view滑動和點擊事件沖突怎麼解決

在Android中,對一個View同時調用OnTouch事件和OnClick事件時,導致事件沖突,比如onClick事件打算執行A動作,OnTouch事件打算執行B動作,但是在實際使用時會發現,當調用OnTouch時,有可能會同時執行A,B兩個動作,這是因為OnClick事件本身就是在OnTouch事件中發生的;在onTouch事件中,如果返回true,就不會執行onClick,返回false,就同時執行onClick方法,要想把OnTouch和onClick事件完全的區分。可能過下列方法,解決該沖突問題:
就是在 OnTouch中的MotionEvent.ACTION_DOWN 時,記錄下點(X1,Y1),
在 MotionEvent.ACTION_UP 時,記錄下點(X2,Y2),然後比對 倆點之間的距離,如果小於一個較小數值(比如5),就認為是Click事件,onTouch中返回false,如果距離較大,可以當作onTouch事件去處理,返回true:
示範如下:
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
x1 = event.getX();
y1 = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
x2 = event.getX();
y2 = event.getY();
if (Math.abs(x1 - x2) < 6) {
return false;// 距離較小,當作click事件來處理
}
if(Math.abs(x1 - x2) >60){ // 真正的onTouch事件
}
}
return true;// 返回true,不執行click事件
}

⑦ Android 自定義實現滑動卡片堆疊效果

第三方的輪子地址 https://github.com/xmuSistone/AndroidPileLayout

https://github.com/HirayClay/StackLayoutManager

https://www.cnblogs.com/lzh-Linux/p/9001235.html

⑧ Android ViewPager 控制滑動速度

參考 《ViewPager smoothScroll 速度控制》 ,很不錯的文章,用Kotlin改寫記錄如下:

自定義滑動控制類,以實現自定義滑動

在自定義ViewPager中,通過反射,更改原生滑動控制類為自定義類

附ViewPager源碼
見 自適應高度(最低高度為屏幕高度) & 橫屏閃退不拉長頁面 & 自定義滑動速度

⑨ androidstudio怎麼設置滑動解鎖

設置自定義。
通過android設置自定義View實現橫向的滑動解鎖。
AndroidStudio是谷歌推出的一個Android集成開發工具,基於IntelliJIDEA.類似EclipseADT,AndroidStudio提供了集成的Android開發工具用於開發和調試。

⑩ 自定義手勢控制,鮮為人知的安卓逆天設置!

眾所周知,IOS設備只有一個大肚臍HOME鍵,並無安卓的虛擬按鍵,但其優秀的手勢控制很好地彌補了這一點,並且也提升了一定的逼格。安卓上其實也有插件足以媲美iOS越獄插件(Activator)這款大名鼎鼎的手勢控制應用。沒錯,GMD Gesture Control就是Android上的Activator!它絲毫不遜色於Activator,甚至功能更加強大!

再也不用羨慕IOS行雲流水的操作了,嘗試新奇和期待更強的安卓玩(裝)機(逼)用戶一定不用錯過哦。

具體支持清單如下,其實這不重要因為你只要知道全部你想到的都能設置上去,這就夠了!並且支持安卓手機自適應屏幕設置,手勢樣式,手勢范圍,左右手等等全部你自己設定。

Tips:下面一大坨可忽略直接跳至教程

- 單點/多點觸摸手勢:支持所有手指(1/2/3/4/5)觸摸、八個方向(上/下/左/右/左上/左下/右上/右下)、張開/合攏手指以及觸摸操作

- 多任務切換:無需離開當前應用即可啟動任意應用、快捷方式或自定義操作

- 自定義操作:應用管理(10種)、狀態欄操作(8種)、瀏覽器操作(10種)、設置開關(8種)、媒體操作(6種)、鍵盤和按鍵(13種)、三星操作(2種)、GMD操作(2種)

- 自定義手勢:創建您自己的手勢來啟動任意應用、快捷方式或自定義操作

- 四指同時張開:啟動面板(類似於SwypePad,能啟動任意應用、快捷方式或自定義操作)

- 四指向右滑動:打開上個應用

- 四指向左滑動:打開上個應用

- 四指同時合攏:主屏幕手勢

- 五指逆時針旋轉:關閉屏幕

- 三指向上滑動:隱藏/顯示狀態欄

- 三指向下滑動:返回手勢

- 四指觸摸兩次:切換窗口

安裝TIPS:

1.網路GMD手勢控制建議漢化版

2.軟體授權,如果你用了手機管家設備記得開啟內存白名單(tips①開機自啟,②一鍵清後台時設置把GMD成白名單)就安裝完畢了

以下是關於GMD的一些設置界面,更多的要看讀者自己的挖掘

我總結:

我實際的使用實感:對於安卓手機其實本身系統自帶的手勢已經很優秀了,咱不和蘋果比,畢竟手勢實用才是王道!相對於PAD,在手機小屏幕上其實手勢體驗有限,而在安卓尤其是ROOT後的pad上這款就是必裝的神器!

熱點內容
java任務管理 發布:2025-05-16 22:17:02 瀏覽:571
安卓如何修改cpu 發布:2025-05-16 21:58:20 瀏覽:364
pythonainb 發布:2025-05-16 21:45:56 瀏覽:855
淘汰伺服器可以做家用電腦嗎 發布:2025-05-16 21:41:31 瀏覽:842
遊程編碼c語言 發布:2025-05-16 21:26:51 瀏覽:586
帝來哪個配置值得購買 發布:2025-05-16 21:12:29 瀏覽:463
什麼是nodejs前端伺服器 發布:2025-05-16 21:12:17 瀏覽:405
編譯選項立即綁定未定義符號 發布:2025-05-16 20:55:13 瀏覽:907
linuxmysql慢日誌 發布:2025-05-16 20:47:58 瀏覽:272
村兩委有哪些配置 發布:2025-05-16 20:34:47 瀏覽:294