我正在开发一个单词争夺游戏,允许用户将图像移动到图像..如果图像不匹配,那么它应该回到它拖动它的原始位置.我已经写了一个示例代码来移动它图像,但这里的问题是,如果我移动一个图像,相邻的图像也开始移动..这是示例代码.
- /** 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阶段,以确保触摸位于对象的边界内.然后你可以设置一个标志来告诉系统正在移动哪个球.我会让你做编码,但希望这会让你知道该怎么做.