View相關(guān)基礎(chǔ)知識

View位置相關(guān)

1恢恼、Android的坐標(biāo)系定義為:屏幕的左上角為坐標(biāo)原點俩由,向右為x軸增大方向妆档,向下為y軸增大方向

  • getLeft():子View左上角距父View左側(cè)的距離

  • getTop():子View左上角距父View頂部的距離痹愚;

  • getRight():子View右下角距父View左側(cè)的距離

  • getBottom():子View右下角距父View頂部的距離

      public final int getLeft() {
          return mLeft;
      }  
      public final int getRight() {
          return mRight;
      }
      public final int getTop() {
          return mTop;
      }
      public final int getBottom() {
          return mBottom;
      }
    
    
      public final int getHeight() {  
          return mBottom - mTop;
      }
    
      public final int getWidth() {
          return mRight - mLeft;
      }
    

對于mLeft,mRight器赞,mTop,mBottom同時也提供了對應(yīng)的set方法墓拜,一般我們不會調(diào)用港柜,因為會影響View的寬高,同時改變著4個值的方法還有setFrame()和setOpticalFrame()咳榜,用過View中l(wèi)ayout的源碼所知boolean changed = isLayoutModeOptical(mParent) ?setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);也就是說潘懊,系統(tǒng)對于這4個屬性的修改,僅僅限于在layout方法內(nèi)部贿衍,而layout方法我們都知道授舟,是View在onMeasure測量之后,對自身以及子控件進(jìn)行位置布局的贸辈。

總結(jié):

  1. 如果想改變這4個屬性的值可以調(diào)用set方法释树,也可以通過設(shè)置LayoutParams設(shè)置對應(yīng)的margin,因為父容器在布局的時候調(diào)用layout(int l, int t, int r, int b)時會加上margin的值
  2. 如果想要改變View對于父容器的影響擎淤,那么影響的是mLeft奢啥、mTop、width嘴拢、height等屬于父容器的屬性(mLeft桩盲、mTop、width席吴、height等都是父容器的屬性赌结,而不屬于本View)
  3. 如果想要改變View自身的影響捞蛋,比如添加監(jiān)聽器,添加動畫等等柬姚,那么影響的是translationX拟杉、translationY等屬于自身的屬性

2、getX()與getY()方法獲取的是View左上角相對于父容器的坐標(biāo)量承;getTranslationX()搬设、getTranslationY()是View左上角相對于父容器的偏移量

getX() = getLeft() + getTranslationX()  
getY() = getRight() + getTranslationY()

3、getLocationOnScreen撕捍、getLocationInWindow

  • View.getLocationOnScreen(int[] position)獲取View相對于整個屏幕的坐標(biāo)
  • View.getLocationInWindow(int[] position)獲取View相對于Window的坐標(biāo)

以上2種方法得到絕對位置的方法只在有彈出窗時會有區(qū)別拿穴。

4、MotionEvent相關(guān)

  • getX()和getY()獲取到的是相對于當(dāng)前View左上角的坐標(biāo)
  • getRawX()和getRawY()獲取的是相對于屏幕左上角的坐標(biāo)

代碼實例##

image

圖中textView的各項值

int left = textView.getLeft();//399
int top = textView.getTop();//739
int right = textView.getRight();//680
int bottom = textView.getBottom();//796
int width = textView.getWidth();//281
int height = textView.getHeight();//57
float x = textView.getX();//399
float y = textView.getY();//739
float translationX = textView.getTranslationX();//0
float translationY = textView.getTranslationY();//0  

現(xiàn)在使用屬性動畫將TextView向右平移100忧风,

ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "TranslationX", 100f);
animator.setDuration(1000);
animator.start();
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
    super.onAnimationEnd(animation);
    int left = textView.getLeft();//399
    int top = textView.getTop();//739
    int right = textView.getRight();//680
    int bottom = textView.getBottom();//796
    int width = textView.getWidth();//281
    int height = textView.getHeight();//57
    int measuredWidth = textView.getMeasuredWidth();//281
    int measuredHeight = textView.getMeasuredHeight();//57
    float x = textView.getX();//499
    float y = textView.getY();//739
    float translationX = textView.getTranslationX();//100
    float translationY = textView.getTranslationY();//0
}
});

可以看出getTranslationX()由0變成100贞言;getX()的值由399變成499,增加了100阀蒂;其他的屬性均沒有變化

Android中顏色獲取

int color = 0xff303F9F;
int color = getResources().getColor(R.color.colorPrimaryDark);
int color = getColor(R.color.colorPrimaryDark);// (API 23及以上)
int color = Color.parseColor("#ff303F9F");
int color = Color.BLUE;
int color = Color.argb(127, 255, 0, 0);
textView.setTextColor(color);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末该窗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚤霞,更是在濱河造成了極大的恐慌酗失,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昧绣,死亡現(xiàn)場離奇詭異规肴,居然都是意外死亡,警方通過查閱死者的電腦和手機夜畴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門拖刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贪绘,你說我怎么就攤上這事兑牡。” “怎么了税灌?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵均函,是天一觀的道長。 經(jīng)常有香客問我菱涤,道長苞也,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任粘秆,我火速辦了婚禮如迟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己殷勘,他們只是感情好此再,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劳吠,像睡著了一般引润。 火紅的嫁衣襯著肌膚如雪巩趁。 梳的紋絲不亂的頭發(fā)上痒玩,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音议慰,去河邊找鬼蠢古。 笑死,一個胖子當(dāng)著我的面吹牛别凹,可吹牛的內(nèi)容都是我干的草讶。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼炉菲,長吁一口氣:“原來是場噩夢啊……” “哼堕战!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拍霜,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤嘱丢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祠饺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體越驻,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年道偷,在試婚紗的時候發(fā)現(xiàn)自己被綠了缀旁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡勺鸦,死狀恐怖并巍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情换途,我是刑警寧澤履澳,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站怀跛,受9級特大地震影響距贷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吻谋,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一忠蝗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漓拾,春花似錦阁最、人聲如沸戒祠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姜盈。三九已至,卻和暖如春配阵,著一層夾襖步出監(jiān)牢的瞬間馏颂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工棋傍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留救拉,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓瘫拣,卻偏偏與公主長得像亿絮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子麸拄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容