我正在使用键盘视图,我有自定义的xml形状,我可以设置特定按钮,这里的颜色是我的形状xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#80B3B3B3"/>
<corners android:bottomRightRadius="2dp" android:bottomLeftRadius="2dp"
android:topLeftRadius="2dp" android:topRightRadius="2dp"/>
</shape>
然后我为键盘视图
覆盖我的onDraw
方法
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
List<Key> keys = getKeyboard().getKeys();
for (Key key : keys) {
Drawable dr = (Drawable)this.getResources().getDrawable(R.drawable.keyshape);
dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
dr.draw(canvas);
}
}
现在我想让那个用户设置这种颜色的形状,任何想法如何在绘制之前设置它?
答案 0 :(得分:1)
首先,你应该做一个你想要设置和扩展它的自定义视图(TextView或Button w / e我将把样本写成扩展视图),因为你无法以编程方式编辑形状xml,你将创建它作为一个整体。
覆盖View的所需行为和构造函数。现在,您将创建一个方法setGradientColors,它将两种颜色作为int值(底部和顶部渐变颜色)。您也可以修改它以设置圆角的半径。
public class GradientView extends View{
public GradientView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public GradientView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
public GradientView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public void setGradientColors(int bottomColor, int topColor) {
GradientDrawable gradient = new GradientDrawable(Orientation.BOTTOM_TOP, new int[] {bottomColor, topColor});
gradient.setShape(GradientDrawable.RECTANGLE);
gradient.setCornerRadius(10.f);
this.setBackgroundDrawable(gradient);
}
}
您将使用此新视图并以编程方式将形状设置为:
GradientView view = (GradientView) findViewById(R.id.customView);
// bottom color - top color order
view.setGradientColors(Color.parseColor("#ff0000"), Color.parseColor("#0000ff"));
如果您需要有关基础知识的进一步帮助和完整说明,我已按照 Link
在我的项目中实现了这一目标希望它也会帮助你。
答案 1 :(得分:0)
您无法以编程方式更改形状颜色,您必须创建具有不同颜色的新形状,或者您可以使用:
imageView.getBackground().setColorFilter(Color.parseColor("#BBBDBF"), Mode.MULTIPLY);
imageview.invalidate();
它会将给定的颜色代码与您的图像背景相乘,并显示颜色变化的效果。
答案 2 :(得分:0)
如果你只想改变xml drawable中形状的颜色,我会稍微改变你的onDraw来做到这一点。
如果您使用<shape>
标记在xml中定义它,则为GradientDrawable。
Drawable dr = this.getResources().getDrawable(R.drawable.keyshape);
if (dr instanceof GradientDrawable) {
GradientDrawable gradientDr = (GradientDrawable) dr;
gradientDr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
gradientDr.setColor(Color.GREEN);
gradientDr.draw(canvas);
}