android clipChildren的使用
今天,簡(jiǎn)單講講android里如何使用clipChildren。
之前,自己一直都不知道有這樣一個(gè)屬性,不過(guò)最近在學(xué)習(xí)自定義控件時(shí),偶然發(fā)現(xiàn)代碼里出現(xiàn)了這個(gè)屬性,不知道是什么意思,所以在網(wǎng)上查找資料,最終是解決了問(wèn)題。
翻文檔找到下面介紹
| android:clipChildren | setClipChildren(boolean) | Defines whether a child is limited to draw inside of its bounds or not.? |
| android:clipToPadding | setClipToPadding(boolean) | Defines whether the ViewGroup will clip its drawing surface so as to exclude the padding area.? |
翻譯就是,
1.clipChild用來(lái)定義他的子控件是否要在他應(yīng)有的邊界內(nèi)進(jìn)行繪制。 默認(rèn)情況下,clipChild被設(shè)置為true。 也就是不允許進(jìn)行擴(kuò)展繪制。
2. clipToPadding用來(lái)定義ViewGroup是否允許在padding中繪制。默認(rèn)情況下,cliptopadding被設(shè)置為ture, 也就是把padding中的值都進(jìn)行裁切了。
還有該功能是android第一個(gè)版本就已經(jīng)提供的方法。 所有可以跨任意android版本使用。
這兩個(gè)屬性聯(lián)合起來(lái)能干什么呢? 哈, 用來(lái)做一些類似于心形放大等點(diǎn)擊特效非常合適啊。 ? ?不用去更改布局, 只需加入這兩個(gè)屬相,并引入動(dòng)畫(huà)效果就完成了。
按照上面的思路,做個(gè)demo吧。
先看看最后的效果吧, 點(diǎn)擊第三個(gè)機(jī)器人就會(huì)播放一個(gè)變大的效果(類似于心變大的效果)
廢話不多說(shuō),上關(guān)鍵代碼:
1. ?布局代碼(核心)
主要看設(shè)的兩個(gè)關(guān)鍵屬性android:clipChildren和android:clipToPadding均為false。 ?這就讓點(diǎn)擊第三個(gè)小人時(shí),可以跨邊界進(jìn)行繪制,并且允許其在padding區(qū)域內(nèi)繪制。
?2. 其他輔助代碼,如動(dòng)畫(huà)和act等內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <scalexmlns:android="http://schemas.android.com/apk/res/android"android:fromXScale="1.0"android:fromYScale="1.0"android:toXScale="3.0"android:toYScale="3.0"android:duration="2000"android:pivotX="50%"android:pivotY="50%"> </scale>
???? 簡(jiǎn)單講講,其實(shí)clipChildren就是使子控件是否可以繪制到父控件的外面,如果沒(méi)有設(shè)置時(shí),默認(rèn)是true,表示不允許繪制到父控件的外面。如果是false,表示可以繪制到父控件的外面。這個(gè)屬性對(duì)動(dòng)畫(huà)十分有用,比如點(diǎn)擊后子控件變大,由于父控件沒(méi)有變大,導(dǎo)致子控件無(wú)法顯示完整,但是設(shè)置android:clipChildren="false"就可以解決這個(gè)問(wèn)題。
再舉一個(gè)例子:
假設(shè)我們要做一個(gè)效果,界面最頂部是一個(gè)ActionBar并且是半透明的,ActionBar下面是一個(gè)ListView,在初始狀態(tài) 下,ListView是top是在ActionBar的bottom位置的,但當(dāng)ListView滾動(dòng)的時(shí)候可以透過(guò)ActionBar看到下面的 ListView的內(nèi)容。如下面兩張圖所示:
正常態(tài):
乍一看,不是很簡(jiǎn)單嗎,只要設(shè)置一下marginTop或者paddingTop就可以了,但問(wèn)題是只用這兩個(gè)其中一個(gè)屬性的話,ListView 滑動(dòng)的時(shí)候就不能滾到paddingTop或者marginTop那部分區(qū)域,有人說(shuō)可以用HeaderView來(lái)解決,這是其中一個(gè)辦法,但僅僅了為這 個(gè)占空使用HeadView有點(diǎn)浪費(fèi)而且會(huì)影響onItemClick的position.于是這里介紹可以到這個(gè)效果的兩個(gè)屬性,就是 android:clipToPadding和android:clipChildren,這兩個(gè)屬性不是太多人用到,這里說(shuō)明一下
clipToPadding就是說(shuō)控件的繪制區(qū)域是否在padding里面的,true的情況下如果你設(shè)置了padding那么繪制的區(qū)域就往里 縮,clipChildren是指子控件是否超過(guò)padding區(qū)域,這兩個(gè)屬性默認(rèn)是true的,所以在設(shè)置了padding情況下,默認(rèn)滾動(dòng)是在 padding內(nèi)部的,要達(dá)到上面的效果主要把這兩個(gè)屬性設(shè)置了false那么這樣子控件就能畫(huà)到padding的區(qū)域了。
<ListViewandroid:layout_gravity="center_vertical"android:id="@+id/list"android:clipChildren="false"android:clipToPadding="false"android:paddingTop="50dip"android:layout_width="match_parent"android:layout_height="match_parent">Actionbar半透明就不詳細(xì)說(shuō)了,只要設(shè)置actionbarOverlay為true并為ActionBar設(shè)置一個(gè)半透明的background即可.
android clipChildren的使用就講完了。
就這么簡(jiǎn)單。
總結(jié)
以上是生活随笔為你收集整理的android clipChildren的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 插补器Interpola
- 下一篇: android handler.rem