带平移动画的Android自定义控件

带平移动画的Android自定义控件,android,animation,xamarin,Android,Animation,Xamarin,我在安卓世界里还是个新手 我尝试在我的应用程序中创建一个自定义控件,如下所示: -对象逐个(计时器)显示在该自定义控件的右侧,并(通过动画)转换到屏幕的左侧 现在的渲染如下所示: 代码如下: public abstract class SheetBase : SurfaceView { protected override void OnDraw(Canvas canvas) { base.OnDraw(canvas); this.Update

我在安卓世界里还是个新手

我尝试在我的应用程序中创建一个自定义控件,如下所示: -对象逐个(计时器)显示在该自定义控件的右侧,并(通过动画)转换到屏幕的左侧

现在的渲染如下所示:

代码如下:

public abstract class SheetBase : SurfaceView
{

    protected override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);
        this.Update(canvas);
    }
}

public class MusicSheet : SheetBase, ISurfaceHolderCallback
{
    public MusicSheet(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }

    public MusicSheet(Context context) : base(context)
    {
    }

    public MusicSheet(Context context, IAttributeSet attrs) : base(context, attrs)
    {
    }

    public MusicSheet(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
    {
    }

    public MusicSheet(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes)
    {
    }

    protected override void Update(Canvas canvas)
    {
    // Logic to draw staf on Canvas
    }

    public void SurfaceChanged(ISurfaceHolder holder, Format format, int width, int height)
    {
        this.Invalidate();
    }

    public void SurfaceCreated(ISurfaceHolder holder)
    {
        this._thread = new Thread(this.Loop);
        this._thread.Start();
    }

    public void SurfaceDestroyed(ISurfaceHolder holder)
    {
        this._thread?.Abort();
    }

    private void Loop()
    {
        while (true)
        {
            Canvas c = null;
            try
            {
                c = this.Holder.LockCanvas();
                c.DrawColor(Color.Transparent, PorterDuff.Mode.Clear);
                // Draw content at the new position
            }
            finally
            {
                if (c != null)
                    this.Holder.UnlockCanvasAndPost(c);
            }
            Thread.Sleep(10);
        }
    }
}

您对解决方案/性能有何看法?

您可以使用
ViewPropertyAnimator
翻译
视图

比如说,

view.animate()
    .translationX(100) // horizontal translation
    .translationY(100) // vertical translation 
要从右向左设置动画,请执行以下操作:

view.animate()
    .translationX( - screenWidth )

有关更多信息,请参阅。

提供一些代码,您迄今为止取得了哪些成就?