Xamarin Imageview拖动样本(Xamarin Imageview Drag Sample)

编程入门 行业动态 更新时间:2024-10-26 13:21:47
Xamarin Imageview拖动样本(Xamarin Imageview Drag Sample)

(Xamarin与Visual Studio 2015)我想用Imageview实现一个简单的Activity,它可以通过触摸移动/拖动:这是我实现的,但是图像闪烁并且移动得更慢。 你能举个例子说明如何实现这个目的吗? 谢谢你的帮助!

private void TouchMeImageViewOnTouch(object sender, View.TouchEventArgs touchEventArgs) { View bild = (View)sender; RelativeLayout.LayoutParams layouti = (RelativeLayout.LayoutParams)bild.LayoutParameters; switch (touchEventArgs.Event.Action & MotionEventActions.Mask) { case MotionEventActions.Down: xDelta = touchEventArgs.Event.GetX()-layouti.LeftMargin; yDelta = touchEventArgs.Event.GetX() - layouti.LeftMargin; break; case MotionEventActions.Move: int wert = (int)touchEventArgs.Event.GetX(); yvalue = touchEventArgs.Event.GetY()-yDelta; xvalue = touchEventArgs.Event.GetX()-xDelta; float xdpi = (int) Resources.DisplayMetrics.Density; layouti.LeftMargin = (int)xvalue; layouti.TopMargin = (int)yvalue; container.Invalidate(); break; case MotionEventActions.Up: break; default: break; } xPositionText.Text = xvalue.ToString(); yPositionText.Text = yvalue.ToString(); }

(Xamarin with Visual Studio 2015 ) I want to implement a simple Activity inwith an Imageview, which can be moved/dragged with touch: This is what I have implemented, but the Image is flickering and moving slower. Can you give me an example how to implement this? Thanks for your help!

private void TouchMeImageViewOnTouch(object sender, View.TouchEventArgs touchEventArgs) { View bild = (View)sender; RelativeLayout.LayoutParams layouti = (RelativeLayout.LayoutParams)bild.LayoutParameters; switch (touchEventArgs.Event.Action & MotionEventActions.Mask) { case MotionEventActions.Down: xDelta = touchEventArgs.Event.GetX()-layouti.LeftMargin; yDelta = touchEventArgs.Event.GetX() - layouti.LeftMargin; break; case MotionEventActions.Move: int wert = (int)touchEventArgs.Event.GetX(); yvalue = touchEventArgs.Event.GetY()-yDelta; xvalue = touchEventArgs.Event.GetX()-xDelta; float xdpi = (int) Resources.DisplayMetrics.Density; layouti.LeftMargin = (int)xvalue; layouti.TopMargin = (int)yvalue; container.Invalidate(); break; case MotionEventActions.Up: break; default: break; } xPositionText.Text = xvalue.ToString(); yPositionText.Text = yvalue.ToString(); }

最满意答案

我试图实现可拖动的imageview进行测试。 Android模拟器中的拖动速度很慢。 但通过在真实设备中进行测试,它可以正常工作并快速移动。

请尝试以下代码示例:

public class MainActivity : Activity, IOnTouchListener { Button dragAbleBt; ImageView imgV1; int screenWidth = 0; int screenHeight = 0; int lastX = 0, lastY = 0; public bool OnTouch(View v, MotionEvent e) { MotionEventActions ea = e.Action; switch (ea) { case MotionEventActions.Down: lastX = (int)e.RawX; lastY = (int)e.RawY; break; case MotionEventActions.Move: int dx = (int)e.RawX - lastX; int dy = (int)e.RawY - lastY; int left = v.Left + dx; int right = v.Right + dx; int top = v.Top + dy; int bottom = v.Bottom + dy; if (left < 0) { left = 0; right = left + v.Width; } if (right > screenWidth) { right = screenWidth; left = right - v.Width; } if (top < 0) { top = 0; bottom = top + v.Height; } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.Height; } v.Layout(left, top, right, bottom); lastX = (int) e.RawX; lastY = (int) e.RawY; v.PostInvalidate(); break; case MotionEventActions.Up: break; } if (v.Id == Resource.Id.imageView1) { return true; } return false; } protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); //DisplayMetrics dm = Resources.DisplayMetrics; //screenWidth = dm.WidthPixels; //screenHeight = dm.HeightPixels; dragAbleBt = FindViewById<Button>(Resource.Id.button1); imgV1 = FindViewById<ImageView>(Resource.Id.imageView1); dragAbleBt.SetOnTouchListener(this); imgV1.SetOnTouchListener(this); } public override void OnWindowFocusChanged(bool hasFocus) { base.OnWindowFocusChanged(hasFocus); if (hasFocus) { Rect outRect = new Rect(); this.Window.FindViewById(Window.IdAndroidContent).GetDrawingRect(outRect); screenWidth = outRect.Width(); screenHeight = outRect.Height(); } } }

请将源代码引用到github

I have tried to implement a dragable imageview for testing. the drag is slow in the android emulator. But by testing it in the real device it works fine and move fast.

Try the following code sample:

public class MainActivity : Activity, IOnTouchListener { Button dragAbleBt; ImageView imgV1; int screenWidth = 0; int screenHeight = 0; int lastX = 0, lastY = 0; public bool OnTouch(View v, MotionEvent e) { MotionEventActions ea = e.Action; switch (ea) { case MotionEventActions.Down: lastX = (int)e.RawX; lastY = (int)e.RawY; break; case MotionEventActions.Move: int dx = (int)e.RawX - lastX; int dy = (int)e.RawY - lastY; int left = v.Left + dx; int right = v.Right + dx; int top = v.Top + dy; int bottom = v.Bottom + dy; if (left < 0) { left = 0; right = left + v.Width; } if (right > screenWidth) { right = screenWidth; left = right - v.Width; } if (top < 0) { top = 0; bottom = top + v.Height; } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.Height; } v.Layout(left, top, right, bottom); lastX = (int) e.RawX; lastY = (int) e.RawY; v.PostInvalidate(); break; case MotionEventActions.Up: break; } if (v.Id == Resource.Id.imageView1) { return true; } return false; } protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); //DisplayMetrics dm = Resources.DisplayMetrics; //screenWidth = dm.WidthPixels; //screenHeight = dm.HeightPixels; dragAbleBt = FindViewById<Button>(Resource.Id.button1); imgV1 = FindViewById<ImageView>(Resource.Id.imageView1); dragAbleBt.SetOnTouchListener(this); imgV1.SetOnTouchListener(this); } public override void OnWindowFocusChanged(bool hasFocus) { base.OnWindowFocusChanged(hasFocus); if (hasFocus) { Rect outRect = new Rect(); this.Window.FindViewById(Window.IdAndroidContent).GetDrawingRect(outRect); screenWidth = outRect.Width(); screenHeight = outRect.Height(); } } }

Please refer the source code to the github

更多推荐

本文发布于:2023-08-02 23:20:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1382452.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:拖动   样本   Imageview   Xamarin   Drag

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!