代碼設置progressbar的progressdrawable方法


項目里面有個地方的progressbar總是報圖片oom,很奇葩.

Caused by: java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:601)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:434)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
    at android.content.res.Resources.createFromResourceStream(Resources.java:2513)
    at android.content.res.Resources.loadDrawable(Resources.java:2165)
    at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:387)
    at android.content.res.Resources.loadDrawable(Resources.java:2072)
    at android.content.res.Resources.getDrawable(Resources.java:710)
    at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:939)
    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:879)
    at android.content.res.Resources.createFromXml(Resources.java:2525)
    at android.content.res.Resources.loadDrawable(Resources.java:2145)
    at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:387)
    at android.content.res.Resources.loadDrawable(Resources.java:2072)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
    at android.widget.ProgressBar.<init>(ProgressBar.java:294)
    at android.widget.ProgressBar.<init>(ProgressBar.java:246)
    at android.widget.ProgressBar.<init>(ProgressBar.java:242)

最初的progressdrawable的xml文件如下

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
        android:drawable="@drawable/progress_default_background" />
    <item android:id="@android:id/progress" >
        <clip>
            <nine-patch android:src="@drawable/progress_default"/>
        </clip>
    </item>
</layer-list>

先是把.9圖改為顏色

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
        android:drawable="@drawable/progress_bg" />
    <item android:id="@android:id/progress"
        android:drawable="@drawable/progress_hl" />
</layer-list>

<!-- 背景-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#E0E0E0"></solid>
    <corners android:radius="1dip"></corners>
</shape>

<!-- 進度-->
<clip xmlns:android="http://schemas.android.com/apk/res/android">
    <shape>
        <solid android:color="#70B23F"></solid>
        <corners android:radius="1dip"></corners>
    </shape>
</clip>

然並卵,還是報oom.

於是想在代碼里用progressbar.setprogressdrawable()來設置,可是如果是從xml中獲得的progressdrawable,發現進度是不會動的.

在網上看了好多人回答,大部分還是xml設置,貌似沒什么人用代碼設置progressdrawable.

自己試了好久終於設置成功了.代碼如下

     GradientDrawable p=new GradientDrawable();
        p.setCornerRadius(dipToPixels(mContext, 1));
        p.setColor(Color.rgb(0x70, 0xb2, 0x3f));
        ClipDrawable progress = new ClipDrawable(p, Gravity.LEFT, ClipDrawable.HORIZONTAL);
        GradientDrawable background = new GradientDrawable();
        background.setColor(Color.rgb(0xe0, 0xe0, 0xe0));
        background.setCornerRadius(dipToPixels(mContext,1));
        LayerDrawable pd=new LayerDrawable(new Drawable[]{background,progress});
     progressbar.setProgressDrawable(pd)

效果看起來沒問題了,希望測試不要又測出什么bug


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM