android ScrollByScrollTo以及平移動畫以及重新LayoutParams的區別
1. 前言
view的滑動在安卓中特別多,基本有三種方式:
1.通過view本身提供的scrollTo/scrollBy方法實現滑動。
2.通過給view新增平移動畫實現滑動。
3.通過改變view的layoutparams使得view重新佈局,從而實現滑動。
2.使用方法
(1)通過view本身提供的scrollTo/scrollBy方法實現滑動
原始碼如下:
public void scrollTo(int x, int y) {
if (mScrollX != x || mScrollY != y) {
int oldX = mScrollX;
int oldY = mScrollY;
mScrollX = x;
mScrollY = y;
invalidateParentCaches();
onScrollChanged(mScrollX, mScrollY, oldX, oldY);
if (!awakenScrollBars()) {
postInvalidateOnAnimation();
}
}
}
scrollTo呼叫
public void scrollBy(int x, int y) {
scrollTo(mScrollX + x, mScrollY + y);
}
呼叫程式碼:
linear_layout.scrollTo(200, 0);
linear_layout.scrollBy(200, 0);
解析:
scrollTo:
實現view的滑動,基於當前位置的絕對滑動,x為正數,向左滑動x畫素,通過原始碼可以知道,多次呼叫scrollTo並不會多次滑動,因為他會判斷mScrollX != x || mScrollY != y,相等則不滑動。
scrollBy:
實現view的滑動,基於當前位置的相對滑動,x為正數,向左滑動x畫素,通過原始碼可以知道,多次呼叫scrollBy會一直滑動,因為他會先呼叫mScrollX + x, mScrollY + y。
還有一個需要注意,這兩個方法,只能改變view的內容,而不能改變view在佈局中的位置,如果想改變view的佈局中的位置,可以移動他的父佈局。
(2).通過給view新增平移動畫實現滑動
可以使用tween動畫,當然也可以使用屬性動畫,我們這邊先介紹平移動畫。
//動畫xml設定
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100"
android:toYDelta="0"/>
</set>
//動畫呼叫
Animation animation = AnimationUtils.loadAnimation(this,R.anim.slide_out_right);
bitmap.startAnimation(animation);
解析:
平移動畫,需要指出一個問題,平移動畫不能真正改變view的位置,也就是說,一個view向左平移了100px,但是這個view的點選事件,並沒有在新位置,而是在原始沒有移動的那個位置,這個就比較尷尬了,平移後,點選事件沒有辦法觸發。當
然有兩個解決方案:1.用屬性動畫。2.預先設定一個一模一樣的view在目標位置,點選事件處理跟外觀跟移動的view都是一樣,當目前的view移動後,立即隱藏,把預先設定的view顯現,這樣可以解決。
(3)通過改變view的layoutparams使得view重新佈局,從而實現滑動。
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams)bitmap.getLayoutParams();
linearParams.leftMargin +=100;
bitmap.setLayoutParams(linearParams);
解析:
這個比較簡單,通過改變view的leftMargin ,rightMargin,達到移動的目的。
3.三種方式比較
1.scrollTo/scrollBy:操作簡單,適合對view的內容的滑動,同樣也可以對view的父元素滑動,從而讓子元素位置改變。
2平移動畫實現滑動:操作簡單,適用於沒有互動的view和有複雜動畫效果的。
3.改變view的layoutparams使得view重新佈局,從而實現滑動:操作複雜,適用於有互動的view。
相關推薦
android ScrollByScrollTo以及平移動畫以及重新LayoutParams的區別
1. 前言 view的滑動在安卓中特別多,基本有三種方式: 1.通過view本身提供的scrollTo/scrollBy方法實現滑動。 2.通過給view新增平移動畫實現滑動。 3.通過改
android studio 開發自定義按鍵以及基礎動畫
效果圖: 這次主要記錄如何改變button的形狀。 首先在專案app>res>drawable資料夾右鍵new新建 drawable rescource file,然後為drawable檔案命名即可。 然後在新建的drawable xml檔
Android開發中Activity跳轉動畫以及finish動畫
Android預設的activity跳轉是不帶動畫的,開發中有時需要加點動畫效果,比如qq中開啟聊天介面時的左滑進入。有兩種方法可供選擇, 第一種是程式碼中加入,在startActivity或者finish之後加入 Activity().overridePendingTra
android條形圖繪製以及加入動畫,並且支援水平滑動
閒話 Android 圖表的繪製,無非是view的繪製,只有掌握了view的繪製流程,那麼一個條形圖,也沒有什麼可難繪製的,那為什麼會有人覺得比較難呢,其實是自己內心裡懼怕他,於是每次出現圖表需求,想都不用想就選擇第三方的,也就是別人寫好的,當然,這也沒有什麼
Android開發之Activity跳轉動畫以及finish動畫
Android預設的activity跳轉是不帶動畫的,但是如果想要動畫的話是有兩種方法的,一種是程式碼中加入,另外一種是寫在佈局中的theme中的 第一種: 程式碼中加入,在startActivity或者finish之後加入 ps:inAnimRe
Android Studio 默認keystore 以及自定義keystore
font upper 不能 use src lis con 位置 sha1 我們使用Android Studio 運行或測試我們的app 它使用一個默認的debug.keystore進行簽名。 這個默認簽名(keystore)是不需要密碼的,它的默認位置在 $HOME/
Android 發送本地廣播 以及創建廣播接收器
ack creat 註冊 string bundle cas err activity 實例 1、創建本地廣播接收器 18 public class MainActivity extends AppCompatActivity{ 19 private Button
零元學Expression Blend 4 - Chapter 6 如何置入Photoshop檔案以及入門動畫設計
生成 per 設定 感覺 gpo blend 針對 一個 selection 原文:零元學Expression Blend 4 - Chapter 6 如何置入Photoshop檔案以及入門動畫設計
Android中Parcel的分析以及使用
label nbsp default ext ews nal itl activit tag 簡單點來說:Parcel就是一個存放讀取數據的容器, Android系統中的binder進程間通信(IPC)就使用了Parcel類來進行客戶端與服務端數據的交互,而且AIDL的數據
[UE4]混合動畫以及Try Get Pawn Owner、Get Velocity、VectorLength的使用
http 技術 之間 src bubuko ner 9.png image ue4 混合動畫,可以混合個多動畫之間的動畫,多個動畫相當於關鍵幀,關鍵幀之間可以生成混合出過度動畫。 實時動態更新Speed參數。 知識點: 一、可以在藍圖中使用
微信小程序彈出和隱藏遮罩層動畫以及五星評分
weixin cli pan ppm for 數組 HA 分層 ref 參考源碼: http://www.see-source.com/weixinwidget/detail.html?wid=82 https://blog.csdn.net/pcaxb/article
Android Studio開發環境配置以及相關說明
behavior 三十五 alt port enter img 截圖 common ESS 版權聲明:本文為HaiyuKing原創文章,轉載請註明出處! 前言 這裏簡單記錄下在開發的時候使用的Android Studio開發環境版本以及相關註意事項。 一般來講,每隔一
Android 獲取證書籤名以及key hash雜湊值
1、獲取Android應用簽名MD5/sha1/SHA256等證書指紋 keytool -v -list -keystore uuoversea_tw.jks 2、獲取Android應用key hash 雜湊值 keytool -exportcert -alias
android全平臺編譯ffmpeg以及x264與fdk-aac實踐
目錄 編譯環境 單獨編譯完整功能ffmpeg庫 開始編譯x264庫 開始編譯fdk-aac庫 ffmpeg混合編譯x264和fdk-aar庫 編譯環境 作業系統:ubuntu 16.05 android-ndk-r10e 注意 這
安卓自定義:Toast 以及Toast的出場動畫 以及Toast上新增圖片 以及點選事件
安卓自定義Toast: 1.自定義一個類:CustomToast 繼承自:Toast 2.在CustomToast類中 新增一個靜態 mCustomToast 物件 private static CustomToast mCustomToast; 3.在CustomToast類中 新
解決app在Android P中安裝失敗以及不相容問題
Android P即Android 9.0 在Google IO2018正式面向全球釋出,它的代號是Pie,仍然基於Linux核心構建。全新的手勢操作選項。底部虛擬鍵將由小白點和一顆返回鍵取代。通過輕觸回到主頁、長按撥出語音助手。新的特性主要有: 利用 Wi-Fi RTT 進行室
使用adb檢視android程式的包名以及棧頂的activity名
windows下進入cmd,定位路徑到adb.exe的路徑,然後使用命令: adb shell dumpsys activity | findstr "mFocusedActivity" 就能看到當前棧頂的activity名字了 如果adb shell命令出
Android開發 - 頁面跳轉以及資料傳遞
Android開發 - 頁面跳轉以及資料傳遞 記錄程式碼詳情參閱Project-FoodList 教程: 頁面需要先在AndroidManifest.xml中註冊,否則會造成閃退 頁面註冊教程與講解 activity a
Android 常用換膚方式以及原理分析
Android 換膚 常用方法 1.通過Theme切換主題 通過在setContentView之前設定Theme實現主題切換。 在styles.xml定義一個夜間主題和白天主題: <style name="LightTheme" parent="Theme.App
安卓之Android.mk多文件以及動態庫編譯
pat 靜態 include 環境 一個 path table and uil 1、多文件編譯 多文件編譯共有兩種方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定義當前模塊的相對路徑