我一直在寻找,我无法找到答案。
我想知道如何在我的andriod应用程序的屏幕上做一个色调,所以当我向上滑动它就像你正在向上滑动一层。
因此,例如我打开应用程序,应用程序主屏幕上有一个透明的灰色屏幕,我可以将其向上滑动。
我知道这是可怕的解释所以请问我会尝试更具描述性。我正在使用visual studio和xamarin以及c#for the andodod app。非常感谢 :)。任何建议都有帮助
答案 0 :(得分:0)
在页面上使用绝对布局。添加到所有儿童半透明盒子的顶部,背景颜色覆盖整个屏幕。实现手势识别器以检测甩尾。检测到动画时,将您的框移出屏幕。如果您使用表单,则手势识别器将位于该框的自定义渲染器中 表格:
public class MyGestureListener : GestureDetector.SimpleOnGestureListener
{
OverlayBox box;
public void SetBox(OverlayBox box)
{
this.box = box;
}
public override bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
Console.WriteLine($"OnFling velocityX={velocityX} velocityY={velocityY}");
if (e2.RawY < e1.RawY) //add more constraints on X
{
Rectangle r = box.Bounds;
r.Top = - r.Height;
box.LayoutTo(r, 500);
}
//for fun
Task.Delay(1000).ContinueWith(_ =>
{
Rectangle r1 = box.Bounds;
r1.Top = 0;
box.LayoutTo(r1, 500);
});
return base.OnFling(e1, e2, velocityX, velocityY);
}
}
class OverlayBoxRenderer : ViewRenderer<OverlayBox, Android.Views.View>
{
private readonly GestureDetector _detector;
private readonly MyGestureListener _listener;
public OverlayBoxRenderer()
{
_listener = new MyGestureListener();
_detector = new GestureDetector(_listener);
}
protected override void OnElementChanged(ElementChangedEventArgs<OverlayBox> e)
{
if (e.NewElement == null)
{
this.Touch -= HandleTouch;
}
if (e.OldElement == null)
{
_listener.SetBox(e.NewElement);
this.Touch += HandleTouch;
}
}
void HandleTouch(object sender, TouchEventArgs e)
{
_detector.OnTouchEvent(e.Event);
}
}