關於View和滑動的一些總結

2021-08-18 08:03:04 字數 2496 閱讀 4640

view中有四個基本的位置引數,分別是left,right,top,bottom。分別代表view的左上角橫座標,右上角橫座標,左上角縱座標,右下角縱座標。這四個引數都是相對父容器來說的。view有乙個獲得寬高的方法:getwidth()和getheight(),其內部實現就是width=right-left,height = bottom-top。並且這四個屬性的賦值是在layout方法中。

android 3.0開始給view新增了幾個位置引數:x,y,translationx,translationy。其中x,y代表view左上角的座標,translationx和translationy代表view相對父容器的偏移量,其初始值是0。

在view平移的過程中,top,left,right,bottom表示的還是原始左上角的位置資訊,值不會改變。改變的是x,y,translationx,translationy。有如下公式:

x = left + translationx
scrollby和scrollto可以用來實現view的滑動,不過根據我的理解,這種方式只能移動「畫框」。有其侷限性。

例如有如下**:

如上圖,在執行scrollby方法之前,是上圖狀態。

執行之後的狀態如上圖,在scrollby之前,灰色框左上角相當於mscrollx = 0,mscrolly = 0。而scrollby(-50,-50)相當於把「相框」往負方向移50。但是framlayout裡面的布局沒變。scrollto同理。

用動畫實現滑動比較簡單,有補間動畫和屬性動畫可供選擇。兩者的區別是補間動畫並不是真正的移動,動畫執行完成後控制項還在原地。而屬性動畫則是控制項真正的移動,因為是在改變其屬性。

補間動畫的使用方法如下:

android:fillafter="true"

>

"2000"

android:fromxdelta="0"

android:toxdelta="300"

android:fromydelta="0"

android:toydelta="300"/>

set>

animation animation = animationutils.loadanimation(mainactivity.this, r.anim

.trans1);

tv1.startanimation(animation);

或者用**建立:

translateanimation translateanimation = new translateanimation(0,200,0,200);

translateanimation.setfillafter(true);

translateanimation.setduration(3000);

tv1.startanimation(translateanimation);

屬性動畫的使用方式就不再介紹了。

通過改變layoutparamas位置引數也可以實現滑動:

viewgroup.marginlayoutparams layoutparams = (viewgroup.marginlayoutparams) tv1.getlayoutparams();

layoutparams.leftmargin+=100

; tv1.setlayoutparams(layoutparams);

tv1.requestlayout();

實現平滑滑動如下:

final viewgroup.marginlayoutparams layoutparams = (viewgroup.marginlayoutparams) tv1.getlayoutparams();

final

long l = system.currenttimemillis();

handler handler = new handler()}};

handler.sendemptymessage(0);

scrollto/scrollby適合用於整體內容的滑動。

動畫適合用於沒有互動的view(考慮到相容,非屬性動畫實現互動很麻煩)和實現複雜效果。

改變布局引數實現起來稍微麻煩一些,但適合有互動的滑動。

關於view滑動的學習

關於view滑動的學習 android螢幕行為中滑動時很重要的,實現螢幕上view控制項的滑動有三個方法。第一種 通過android系統自帶的scrollto scrollby方法,對view進行滑動控制。相關方法連線 第二種 通過動畫的形式,注意通過動畫形式會出現的問題是,當在螢幕上移動乙個控制項...

關於stringstream的一些總結

c 標準庫中的提供了比ansi c的更高階的一些功能,即單純性 型別安全和可擴充套件性。可以使用這些庫來實現安全和自動的型別轉換。如果你已習慣了風格的轉換,也許你首先會問 為什麼要花額外的精力來學習基於的型別轉換呢?也許對下面乙個簡單的例子的回顧能夠說服你。假設你想用sprintf 函式將乙個變數從...

關於JSON的一些總結

一 關於json json是一種類似於xml的通用資料交換格式,具有比xml更高的傳輸效率.從結構上看,所有的資料 data 最終都可以分解成三種型別 第一種型別是標量 scalar 也就是乙個單獨的字串 string 或數字 numbers 比如 北京 這個單獨的詞。第二種型別是序列 sequen...