以编程方式设置背景颜色的百分比

时间:2015-06-09 19:00:04

标签: android view gradient background-color

假设我想仅为线性布局的64%背景着色。我想从左到右着色它,并使它成为纯色。

起初我尝试使用Gradient Drawables,因为它允许我指定颜色的方向和颜色......但它不允许我指定%。如果我可以在xml drawable中执行此操作,那将是理想的,但百分比将会发生变化,我需要根据%重新调整背景。

这是我为整个视图着色的代码。有没有办法只对35%的视图而不是整个视图进行着色?

GradientDrawable gradient = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT,
                                        new int[] {getContext().getResources().getColor(R.color.icitizen_poll_opaque_gold),
                                        getContext().getResources().getColor(R.color.icitizen_poll_opaque_gold)});
                                gradient.setCornerRadius(1f);
                                v.setBackground(gradient);

3 个答案:

答案 0 :(得分:2)

我认为这是不可能的,相反,您可以尝试使用嵌套的linearlayouts并使用权重属性(以指定%)

示例示例:

is within

答案 1 :(得分:1)

您可以使用FrameLayout在自己的下方创建另一个布局,并为其背景设置颜色。

<FrameLayout
   android:layout_height="match_parent"
   android:layout_width="match_parent">
   <LinearLayout
     android:layout_height="match_parent"
     android:layout_width="0dp"/> // set 35% of screen programmatically
   <LinearLayout
     android:layout_height="match_parent"
     android:layout_width="match_parent"/>
</FrameLayout>

How to get screen size:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

答案 2 :(得分:1)

完全有可能,很少有办法,但我建议使用自定义Drawable,例如:

public class PercentDrawable extends Drawable {

private final int percent;
private final Paint paint;

public PercentDrawable(int percent) {
    super();

    this.percent = percent;
    this.paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    this.paint.setColor(0xffff0000);
}

@Override
public void draw(Canvas canvas) {
    canvas.drawRect(0, 0, canvas.getWidth(), percent * canvas.getHeight() / 100, paint);
}

@Override
public void setAlpha(int i) {

}

@Override
public void setColorFilter(ColorFilter colorFilter) {

}

@Override
public int getOpacity() {
    return 0;
}

}

......并使用它:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.background).setBackground(new PercentDrawable(30));
} //... rest of Activity

R.id.background是简单的LinearLayout,其match_parent为w / h,它也可以是简单的View。你应该保持xml布局尽可能简单。