我想根据百分比更改按钮的背景颜色。
我得到了20%作为输入 - 它应该显示一个按钮的背景颜色,该按钮由一些颜色填充,让绿色只有20%绿色。
20%我的意思是Button应该只填充其100%的宽度的20%。所以它看起来像Seekbar。但实际上它将是按钮。
40%输入 - 只有40%的背景颜色填充绿色,依此类推。
知道怎么做吗?
注意:请不要告诉您使用Seekbar或Progressbar。
答案 0 :(得分:3)
使用Button我看到了任何方法。但我之前做过同样的事情。
所以可能会对你有帮助。
<RelativeLayout
android:id="@+id/relProgress"
android:layout_width="200dp"
android:layout_height="35dp"
android:background="#d7d7d7"
android:clickable="true"
>
<ProgressBar
android:id="@+id/progressDownload"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:progress="0"
android:progressDrawable="@drawable/progressbar_style" />
<Button
android:id="@+id/txtProgressDownload"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="30%"
android:background="@android:color/transparent"
android:textColor="#4d5359"
android:textSize="15dp" />
</RelativeLayout>
<强> progressbar_style.xml 强>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<shape>
<solid android:color="#ccd4e0" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="#6dd451" />
</shape>
</clip>
</item>
</layer-list>
以编程方式设置进度条进度
progressDownload.setProgress(20);
答案 1 :(得分:1)
这是我的解决方案,带有cutom视图
public class PrecentageButton extends View {
private Paint paintDefault;
private Paint paintFilled;
private RectF rectDefault;
private RectF rectFilled;
private int mWidth;
private int mHeight;
private float precentValue=20;
public PrecentageButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
paintDefault = new Paint();
paintDefault.setColor(Color.GRAY);
paintFilled = new Paint();
paintFilled.setColor(Color.GREEN);
rectDefault = new RectF();
rectFilled = new RectF();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mWidth = getWidth();
mHeight = getHeight();
rectDefault.set(10, 10, 200, 100);
rectFilled.set(10, 10, precentValue, 100);
canvas.drawRect(rectDefault, paintDefault);
canvas.drawRect(rectFilled, paintFilled);
}
public void setPrecentValue(int precentValue) {
this.precentValue = precentValue;
invalidate();
}
}
<强> OUTUPT 强>