저는 Xamarin.Forms를 사용하고 있으며 버튼 색상으로 그래디언트를 설정하려고합니다. 나는이 사람과 정확히 같은 문제가있다 : Gradient Layer form as the form of a button in Xamarin.Forms Android버튼 색상 렌더러로 그래디언트 설정
그러나 주어진 대답은 내가 바라는 것이 아니다.
대답은 성공적이지만 모든 버튼을 그라디언트로 설정합니다.
I.E : 사람은 배경 만 칠해졌고, 주어진 대답은 전체 버튼을 설정하고, 버튼 자체의 색상을 설정하고 패딩을 유지하려고합니다.
Here 나는 왜 코드가 작동하지 않는지, 어떻게 대답을 사용하고이 작업을 할 수 있습니까? 편집 이와 나는 올바른 그라데이션하지만 버튼을 얻을, 나는 시도
public class GenericButtonRenderer :ButtonRenderer
{
private Xamarin.Forms.Color StartColor { get; set; }
private Xamarin.Forms.Color EndColor { get; set; }
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);
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
try
{
var btn = e.NewElement as GenericButton;
this.StartColor = btn.StartColor;
this.EndColor = btn.EndColor;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(@" ERROR: ", ex.Message);
}
}
}//See result here: http://i.stack.imgur.com/3ZpuX.png
두 번째 일 : I 버튼을 넘어 backround에 얻을이 코드
public class GenericButton:Button
{
public Xamarin.Forms.Color StartColor { get; set; }
public Xamarin.Forms.Color EndColor { get; set; }
}
: 여기 내 코드입니다 레이아웃 잃고 : 나는 더 나은 답을 찾을 때까지 내가 무엇을 찾고 있어요 정확하지 않은 해결에 도착
public class GenericButtonRenderer :ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
try
{
var btn = e.NewElement as GenericButton;
var gradient = new GradientDrawable(GradientDrawable.Orientation.TopBottom, new[] {
btn.StartColor.ToAndroid().ToArgb(),
btn.EndColor.ToAndroid().ToArgb()
});
Control.Background=gradient;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(@" ERROR: ", ex.Message);
}
}
}//See result here: http://i.stack.imgur.com/4CDtG.png
여기에 전체 코드를 게시하십시오. 다른 주제에 대한 링크는 그대로두고 문제가있는 장소와 문제를 해결할 수있는 방법을 보여주는 코드를 게시하십시오. – sphinks
내 코드는 링크의 코드와 정확히 같습니다. – Jaspion
그건 중요하지 않습니다. 다른 사람들이 당신에게 답을 줄 수 있도록하십시오. 당신은 답을 원합니다 - 여기에 모든 코드를 게시하십시오. 한 곳에서 모든 것을 보았을 때 여러 링크로가는 것이 훨씬 쉽습니다. – sphinks