1. 程式人生 > >android ScrollByScrollTo以及平移動畫以及重新LayoutParams的區別

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) #定義當前模塊的相對路徑