繁体   English   中英

在按钮上绘制字符串

Draw string on a button

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想在带有 PlatformEffect 的按钮的右下角绘制一个自定义字符串。 更喜欢使用更灵活的效果,并将其仅应用于特定按钮而不是应用程序范围。 这些按钮是在没有 xaml 的情况下动态创建的。

这是可能的还是我需要创建一个自定义按钮+渲染器?

谢谢。

2 个回复

您可以创建自定义按钮,然后通过自定义渲染器设置文本对齐方式。

[assembly: ExportRenderer(typeof(Xamarin.Forms.Button), typeof(ButtonCustomRenderer))]//set the Button as your custom button
namespace App3.Droid
{
public class ButtonCustomRenderer : ButtonRenderer
{
    public ButtonCustomRenderer(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
    {
        base.OnElementChanged(e);
        Control.Gravity = GravityFlags.End // Set the horizontal text alignment to right 
                       | GravityFlags.Bottom; // Set the vertical text alignment to bottom
    }
  }
}

在此处输入图像描述

我通过创建一个覆盖 Draw 方法的渲染器来解决它。

public class HotkeyButtonRenderer : ButtonRenderer
{
    HotkeyButton element;

    public HotkeyButtonRenderer(Context ctx) : base(ctx)
    {

    }

    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);
        element = Element as HotkeyButton;
        SetWillNotDraw(false);
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);
        if (element != null && e.PropertyName == HotkeyButton.HotkeyTextProperty.PropertyName)
        {
            Invalidate();
        }
    }

    public override void Draw(Canvas canvas)
    {
        base.Draw(canvas);
        if (element != null && !string.IsNullOrEmpty(element.HotkeyText))
        {
            string textToDraw = string.Format("({0})", element.HotkeyText);
            float textSize = Control.TextSize / 1.5f;
            SizeF measuredTextSize = GetTextSize(textToDraw, element.FontFamily, textSize);
            float x = 5;
            float y = Height-measuredTextSize.Height/2;

            canvas.DrawText(textToDraw,
                x,
                y,
                new TextPaint
                {
                    Color = element.BorderColor.ToAndroid(),
                    TextSize = textSize
                });
        }
    }

    private SizeF GetTextSize(string text, string fontFamily, float textSize)
    {
        var textPaint = new SKPaint(new SKFont(SKTypeface.FromFamilyName(fontFamily), textSize));
        SKRect textBounds = new SKRect(); 
        textPaint.MeasureText(text, ref textBounds);
        return new SizeF(textBounds.Width, textBounds.Height);
    }
}

public class HotkeyButton : Button
{
    public static readonly BindableProperty HotkeyTextProperty = BindableProperty.Create(
        propertyName: nameof(HotkeyText),
        returnType: typeof(string),
        declaringType: typeof(MobileEntry),
        defaultValue: string.Empty);

    public string HotkeyText
    {
        get { return (string)GetValue(HotkeyTextProperty); }
        set { SetValue(HotkeyTextProperty, value); }
    }
}
1 弦不会画

近两天了,我仍然没有弄清楚。 我很确定我现在失眠了,我只想知道该怎么做。 我要绘制的字符串在Square类的startGame()中。 该方法在startNormalMode()的NormalMode类中被调用。 晚上9点去睡觉,晚上11:30醒来,现在是凌晨3:05,由于这个问题,我仍 ...

2 在java中绘制/擦除按钮

我正在努力找到一种方法来实现一种方法,无论何时单击绘图按钮,它将决定您是绘图还是删除。 我的代码现在可以自动决定是否根据您点击的障碍物进行绘制或擦除 请帮助我谢谢。 ...

3 按钮不会画画

下面的自定义ImageButton根本不会在Android Studio中或在应用程序中构建之后绘制。 我修复了以前的错误,但我已经尝试了一切,它根本不会绘制按钮。 一些东西: 当我将按钮添加到布局文件时,它是一个0x0对象。 它似乎没有内容。 我正在关注一些自定义视图的 ...

8 在按下按钮时画一个圆

我对Java很陌生,想在单击按钮时画一个圆圈。 到目前为止,我已经知道了圆圈并显示了按钮,但似乎无法使按钮正常工作。 圆圈没有出现。 当我添加另一个setVisible(true); 进入actionPerformed按钮将起作用并显示我的圈子,但另一个按钮将出现在窗口顶部。 ...

9 用按钮绘制图像

嗨,我试图用画布上的按钮绘制图像。 但是我不能在干净的画布上画画。 所以; &lt;!doctype html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;title&gt;Başlıksız ...

10 试图画一个按钮

我正在尝试绘制一个带有图像作为背景的按钮。 这是我的xml: 在图形布局视图中,它看起来像我的意图: 但在模拟器上,按钮占据了屏幕的整个宽度: 我不止一次读过这个规范,却无法得到我的错误, 如何编写按钮xml,以便按钮在仿真器(以及所有设备......)上看起来如Ecl ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM