带有翻译动画的Android自定义控件

时间:2017-08-17 13:41:33

标签: android animation xamarin

我在Android世界中很新。

我尝试在我的应用中创建一个自定义控件,如下面的描述:   - 对象在自定义控件的右侧逐个显示(计时器),并在屏幕左侧进行翻译(带动画)。

现在渲染如下:

Staf

代码就像:

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);
        }
    }
}

您如何看待解决方案/表演?

1 个答案:

答案 0 :(得分:1)

您可以使用ViewPropertyAnimator翻译View

例如,

view.animate()
    .translationX(100) // horizontal translation
    .translationY(100) // vertical translation 

从右到左制作动画:

view.animate()
    .translationX( - screenWidth )

有关详细信息,请参阅doc