(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
更多推荐
发布评论