我正在开发一个单词争夺游戏,允许用户将图像移动到图像..如果图像不匹配,那么它应该回到它拖动它的原始位置.我已经写了一个示例代码来移动它图像,但这里的问题是,如果我移动一个图像,相邻的图像也开始移动..这是示例代码.
/** Touchmoveimage.java*/ package com.examples.Touchmoveimage; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.widget.LinearLayout.LayoutParams; public class Touchmoveimage extends Activity implements OnTouchListener{ int windowwidth; int windowheight; private LayoutParams layoutParams ; private LayoutParams layoutParams1 ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); windowwidth = getWindowManager().getDefaultDisplay().getWidth(); windowheight = getWindowManager().getDefaultDisplay().getHeight(); ImageView ball= (ImageView)findViewById(R.id.ball); ball.setOnTouchListener(this); ImageView ball1 = (ImageView)findViewById(R.id.ball1); ball1.setOnTouchListener(this); } public boolean onTouch(View v,MotionEvent event) { switch(v.getId()) { case R.id.ball: ImageView ball= (ImageView)findViewById(R.id.ball); layoutParams = (LayoutParams) ball.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: int x_cord = (int)event.getRawX(); int y_cord = (int)event.getRawY(); if(x_cord>windowwidth){x_cord=windowwidth;} if(y_cord>windowheight){y_cord=windowheight;} layoutParams.leftMargin = x_cord -25; layoutParams.topMargin = y_cord - 75; ball.setLayoutParams(layoutParams); break; default : break; } case R.id.ball1: ImageView ball1= (ImageView)findViewById(R.id.ball1); layoutParams1 = (LayoutParams) ball1.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: int x_cord = (int)event.getRawX(); int y_cord = (int)event.getRawY(); if(x_cord>windowwidth){x_cord=windowwidth;} if(y_cord>windowheight){y_cord=windowheight;} layoutParams1.leftMargin = x_cord -25; layoutParams1.topMargin = y_cord - 75; ball1.setLayoutParams(layoutParams1); break; default : break; } } return true;} }
<!-- main.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="50sp" android:layout_height="50sp" android:id="@+id/ball" android:src="@drawable/ball"> </ImageView> <ImageView android:layout_y="30dip" android:layout_x="118dip" android:layout_width="50sp" android:layout_height="50sp" android:id="@+id/ball1" android:src="@drawable/ball1"> </ImageView> </LinearLayout>
任何人都帮助我.想要解决所有可能的事情……
解决方法
你需要确保事件发生在给定的球中.即使您在图像对象外部触摸,也会声明onTouch事件.因此,您可以做的是检查已阻止的ACTION_DOWN阶段,以确保触摸位于对象的边界内.然后你可以设置一个标志来告诉系统正在移动哪个球.我会让你做编码,但希望这会让你知道该怎么做.