項目里面有個地方的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