首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MR.Gestures -自定义视图

MR.Gestures -自定义视图
EN

Stack Overflow用户
提问于 2018-09-13 08:26:57
回答 1查看 365关注 0票数 0

我有一个SKCanvasView,它绘制一些图形,现在有一个需要得到的点击位置。在阅读了几篇文章之后,我决定通过MR.Gestures来实现这一点。因为包中没有SKCanvasView的标准实现,所以我需要自己实现它。

我猜是来自IGestureAwareControl

代码语言:javascript
复制
public class AudioWaveView : SKCanvasView, IGestureAwareControl

这一项需要实现一组事件和命令:

代码语言:javascript
复制
    public GestureHandler GestureHandler { get; }
    public ICommand DownCommand { get; set; }
    public object DownCommandParameter { get; set; }
    public ICommand UpCommand { get; set; }
    public object UpCommandParameter { get; set; }
    public ICommand TappingCommand { get; set; }
    public object TappingCommandParameter { get; set; }
    public ICommand TappedCommand { get; set; }
    public object TappedCommandParameter { get; set; }
    public ICommand DoubleTappedCommand { get; set; }
    public object DoubleTappedCommandParameter { get; set; }
    public ICommand LongPressingCommand { get; set; }
    public object LongPressingCommandParameter { get; set; }
    public ICommand LongPressedCommand { get; set; }
    public object LongPressedCommandParameter { get; set; }
    public ICommand PinchingCommand { get; set; }
    public object PinchingCommandParameter { get; set; }
    public ICommand PinchedCommand { get; set; }
    public object PinchedCommandParameter { get; set; }
    public ICommand PanningCommand { get; set; }
    public object PanningCommandParameter { get; set; }
    public ICommand PannedCommand { get; set; }
    public object PannedCommandParameter { get; set; }
    public ICommand SwipedCommand { get; set; }
    public object SwipedCommandParameter { get; set; }
    public ICommand RotatingCommand { get; set; }
    public object RotatingCommandParameter { get; set; }
    public ICommand RotatedCommand { get; set; }
    public object RotatedCommandParameter { get; set; }
    public event EventHandler<DownUpEventArgs> Down;
    public event EventHandler<DownUpEventArgs> Up;
    public event EventHandler<TapEventArgs> Tapping;
    public event EventHandler<TapEventArgs> Tapped;
    public event EventHandler<TapEventArgs> DoubleTapped;
    public event EventHandler<LongPressEventArgs> LongPressing;
    public event EventHandler<LongPressEventArgs> LongPressed;
    public event EventHandler<PinchEventArgs> Pinching;
    public event EventHandler<PinchEventArgs> Pinched;
    public event EventHandler<PanEventArgs> Panning;
    public event EventHandler<PanEventArgs> Panned;
    public event EventHandler<SwipeEventArgs> Swiped;
    public event EventHandler<RotateEventArgs> Rotating;
    public event EventHandler<RotateEventArgs> Rotated;

我不知道这是不是该走的路,但这看起来是一个很好的起点,但现在我被困住了,不知道如何走得更远。有没有人做过类似的事情,或者知道解决办法?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 08:50:22

请看一下微软关于SkiaSharp的触控文章。它使用一个效果来支持触摸操作,更多关于效果的详细信息在这里:从效果调用事件

基本上,您需要将TouchEffect添加到添加CanvasView的容器中(甚至将效果添加到CanvasView中,在上面链接的文章中有这样的示例):

代码语言:javascript
复制
<Grid BackgroundColor="White" Grid.Row="1">
    <skia:SKCanvasView x:Name="canvasView" PaintSurface="OnCanvasViewPaintSurface" />
    <Grid.Effects>
        <tt:TouchEffect Capture="True" TouchAction="OnTouchEffectAction" />
    </Grid.Effects>
</Grid>

然后为TouchAction事件添加一个处理程序,如下所示。您需要首先将触摸点转换为像素,然后检查是否

代码语言:javascript
复制
void OnTouchEffectAction(object sender, TouchActionEventArgs args)
{
        if (args.Type != TouchActionType.Pressed)
        {
            return;
        }

        var pointLocation = args.Location;
        var point =
            new SKPoint((float)(canvasView.CanvasSize.Width * pointLocation.X / canvasView.Width),
                        (float)(canvasView.CanvasSize.Height * pointLocation.Y / canvasView.Height));

        // TODO: Handle your touch here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52309588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档