2015-06-09 22 views
0

Скажем, я хочу, чтобы цвет был всего 64% ​​от фона linearlayout. Я хочу покрасить его слева направо и иметь сплошной цвет.Установка% фонового цвета программно

Сначала я попытался использовать Gradient Drawables, потому что это позволило мне указать ориентацию цвета и цвета ... но это не позволяет мне указать%. Если бы я мог сделать это в xml-образце, это было бы идеально, но проценты будут меняться, и мне нужно изменить настройки фона на основе%.

Вот мой код для окраски всего изображения. Есть ли способ, чтобы только цвет сказал 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); 
+0

Вы были довольно близки: вместо GradientDrawable используйте ClipDrawable, забудьте о нижеследующих ответах с дополнительными представлениями и т. Д. ... – pskink

ответ

1

Это совершенно возможно, несколько способов сделать это, но я бы рекомендовал d с помощью пользовательских 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 ж/ч, он также может быть простым представлением. Вы должны максимально упростить компоновку xml.

+0

именно то, что я искал. Спасибо, сэр! – cj1098

+0

@ cj1098 пользовательский Drawable - хорошая попытка, но ClipDrawable сделает то же самое с 2 или 3 строками кода – pskink

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; 
+0

, но как бы покрасить его%? Это проблема, с которой я сталкиваюсь. – cj1098

+0

получить размер экрана программно и установить его% на ваш вид –

2

Я думаю, что это не возможно, вместо этого вы можете попробовать с вложенными linearlayouts и использовать атрибут веса (указать%)

Пример Пример:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.7" 
     android:background="@android:color/darker_gray"> 

    </LinearLayout> 

    <LinearLayout android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.3" 
     android:background="@android:color/black"> 

    </LinearLayout> 




</LinearLayout> 
Смежные вопросы