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...