安卓adapter子項動態設定控制元件寬度以及擴充套件動畫
介面卡每項的一個控制元件 根據資料百分比大小 動態設定寬度 以及擴充套件動畫
非常簡單的一個功能 但是也寫出來 希望有點幫助吧
baseAdapter 的getView 會根據佈局 初始化convertView 此處我的convertView有兩個控制元件 固定高寬的ImageView 剩餘的就是另外一個LinearLayout了
getView大家都清楚 但是在此方法中 return convertView 的時候 獲取控制元件LinearLayout最大寬度 是獲取不了的 但是getView又是暴露出來給我們編碼的最後一處
所以我獲取寬度是在 介面卡例項化的時候 根據螢幕寬度 減去 另外一個控制元件的寬度 以及間距
獲取手機螢幕寬度的程式碼
DisplayMetrics metrics=new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);.
int width = metrics.widthPixels;
獲取的是px 畫素
佈局一般是用dp dp轉px 方法
dp * context.getResources().getDisplayMetrics().density +0.5f
如此一來即可以獲取控制元件佈局的px 然後在getView中
LayoutParams params = (LayoutParams) view.getLayoutParams();
params.width = (int) (width * (顯示的比例));
view.setLayoutParams(params) 設定控制元件的寬度了
設定動畫
view.clearAnimation();
view.startAnimation(mExtendAnimation);
mExtendAnimation = AnimationUtils.loadAnimation(context, R.anim.extend);
動畫的xml檔案
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 資料 平移 展開動畫 -->
<scale
android:duration="1000"
android:fromXScale="0.0"
android:fromYScale="1.0"
android:pivotX="0%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0"
android:fillAfter="true"
/>
</set>
到這就已經完成了 為了美觀 在做個處理 每項顏色漸變 在getView中
view.setBackgroundColor(getShadeColor(position))
private Integer getShadeColor(int position) {
// 開始色碼
float Br = 221.0f;
float Bg = 70.0f;
float Bb = 26.0f;
// / 結束色碼
float Er = 237.0f;
float Eg = 182.0f;
float Eb = 51.0f;
//漸變公式
int count = list.size();
int countR = (int) (Br + (Er - Br) / (count + 1) * position);
int countG = (int) (Bg + (Eg - Bg) / (count + 1) * position);
int countB = (int) (Bb + (Eb - Bb) / (count + 1) * position);
return Color.rgb(countR, countG, countB);
}