带平移动画的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 )
有关更多信息,请参阅。提供一些代码,您迄今为止取得了哪些成就?