我有一个带有弯曲边缘(边界半径)的xamarin Android按钮。在那里我想把颜色变成渐变。
如果我尝试通过绘制画布(作为自定义渲染器)来制作它,它将通过覆盖ButtonRenderer的DispatchDraw函数来消失弯曲边缘。
protected override void DispatchDraw(Canvas canvas)
{
var gradient = new Android.Graphics.LinearGradient(0, 0, Width, Height,
this.StartColor.ToAndroid(),
this.EndColor.ToAndroid(),
Android.Graphics.Shader.TileMode.Clamp);
var paint = new Android.Graphics.Paint()
{
Dither = true,
};
paint.SetShader(gradient);
canvas.DrawPaint(paint);
base.DispatchDraw(canvas);
}
使用上面的代码,它按钮将消失弯曲的边缘。在此代码之前,我使用background属性设置颜色。有了这个属性,我可以看到弯曲的边缘,但没有上面的代码。
所以我的假设是,如果我可以为按钮的背景颜色属性设置渐变颜色,这将起作用,遗憾的是我无法找到一种方法。
有人可以帮助我实现这个目标吗?
答案 0 :(得分:2)
我觉得XML更容易理解,我会这样做:
<强> Gradient.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<!--make a gradient background-->
<gradient
android:type="linear"
android:startColor="#556B2F"
android:endColor="#BDB76B"
android:centerColor="#ffffff"
android:angle="90"
android:gradientRadius="90"
/>
<!--apply a border around button-->
<stroke android:color="#006400" android:width="2dp" />
<!-- make the button corners rounded-->
<corners android:radius="25dp"/>
</shape>
</item>
</selector>
在按钮xml中使用它:
android:background="@drawable/Gradient"
或者像这样的C#代码:
_button.SetBackgroundResource(Resource.Drawable.Gradient);