移动不了是这么回事?

来源:2-3 缺口方块与点击方块的数据交换

qq__4290

2016-08-02 11:34

Toast可以执行,下面的

if(fiag){

changeDataByImageView((ImageView) v);

}   执行不了,求解答。。。

用的android studio工具写的代码;


public class MainActivity extends AppCompatActivity {
   //    利用二维数组创建游戏小方块;
   private ImageView[][] imageViews = new ImageView[3][5];
   private GridLayout gridLayout;
   private ImageView null_image;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.hg)).getBitmap();
       int tu = bitmap.getWidth() / 5;//设置每个小方块的宽和高
       for (int i = 0; i < imageViews.length; i++) {
           for (int j = 0; j < imageViews[0].length; j++) {
               Bitmap bm = Bitmap.createBitmap(bitmap, j * tu, i * tu, tu, tu);
               imageViews[i][j] = new ImageView(this);
               imageViews[i][j].setImageBitmap(bm);//设置每个小方块放 的图案
               imageViews[i][j].setPadding(2, 2, 2, 2);//每个图案之间的间距
               imageViews[i][j].setTag(new GameData(i, j, bm));//绑定自定义数据
               imageViews[i][j].setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       boolean fiag = isHasByImageView((ImageView) v);
                       Toast.makeText(MainActivity.this, "是否存在" + fiag, Toast.LENGTH_SHORT).show();
                       if (fiag){
                           changeDataByImageView((ImageView) v);
                       }
                   }
               });
           }
       }
       //初始化游戏主界面,并添加若干个小方块
       gridLayout = (GridLayout) findViewById(R.id.gridLayout);
       for (int i = 0; i < imageViews.length; i++) {
           for (int j = 0; j < imageViews[0].length; j++) {
               gridLayout.addView(imageViews[i][j]);

           }
       }
       setNullImageView(imageViews[2][4]);

   }

   public void changeDataByImageView(final ImageView imageView) {
       //创建一个动画,设置好方向,移动的距离
       TranslateAnimation translateAnimation = null;
       if (imageView.getX() > null_image.getX()) {
           //往上移
           translateAnimation = new TranslateAnimation(0.1f, -imageView.getWidth(), 0.1f, 0.1f);
       } else if (imageView.getX() < null_image.getX()) {
           //往下移
           translateAnimation = new TranslateAnimation(0.1f, imageView.getWidth(), 0.1f, 0.1f);
       } else if (imageView.getY() > null_image.getY()) {
           //往左移
           translateAnimation = new TranslateAnimation(0.1f, 0.1f, 0.1f, -imageView.getWidth());
       } else if (imageView.getY() < null_image.getY()) {
           //往右移
           translateAnimation = new TranslateAnimation(0.1f, 0.1f, 0.1f, imageView.getWidth());
       }
       //设置时常
       translateAnimation.setDuration(70);
       //设置动画结束后是否停留
       translateAnimation.setFillAfter(true);
       //设置动画结束之后真正的把数据交换了
       translateAnimation.setAnimationListener(new Animation.AnimationListener() {
           @Override
           public void onAnimationStart(Animation animation) {

           }

           @Override
           public void onAnimationRepeat(Animation animation) {

           }


           @Override
           public void onAnimationEnd(Animation animation) {
               imageView.clearAnimation();
               GameData mGameData = (GameData)imageView.getTag();
               null_image.setImageBitmap(mGameData.bm);
               GameData mNullGameData = (GameData)null_image.getTag();
               mNullGameData.bm=mGameData.bm;
               mNullGameData.p_x=mGameData.p_x;
               mNullGameData.p_y=mGameData.p_y;
               setNullImageView(imageView);

           }
       });
       //执行动画
       imageView.startAnimation(translateAnimation);
   }

   public void setNullImageView(ImageView nullImageView) {
       nullImageView.setImageBitmap(null);
       null_image = nullImageView;
   }

   public boolean isHasByImageView(ImageView nullImageView) {
       GameData nullGameData = (GameData) null_image.getTag();
       GameData nGameData = (GameData) null_image.getTag();
       nullImageView.getTag();
       if (nullGameData.y == nGameData.y && nGameData.x + 1 == nullGameData.x) {
           return true;
       } else if (nullGameData.y == nGameData.y && nGameData.x - 1 == nullGameData.x) {
           return true;
       } else if (nullGameData.y == nGameData.y + 1 && nGameData.x + 1 == nullGameData.x) {
           return true;
       } else if (nullGameData.y == nGameData.y - 1 && nGameData.x + 1 == nullGameData.x) {
           return true;
       }
       return false;
   }

   class GameData {
       //小方块实际位置
       int x = 0;
       int y = 0;
       //小方块图片位置
       int p_x = 0;
       int p_y = 0;
       public Bitmap bm;

       public GameData(int x, int y, Bitmap bm) {
           super();
           this.x = x;

写回答 关注

4回答

  • 阿旭_
    2016-08-03 10:45:50
    已采纳
    package com.example.androidtest;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.drawable.BitmapDrawable;
    import android.os.Bundle;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.TranslateAnimation;
    import android.widget.GridLayout;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    	// 利用二维数组创建游戏小方块;
    	private ImageView[][] imageViews = new ImageView[3][5];
    	private GridLayout gridLayout;
    	private ImageView null_image;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.hg)).getBitmap();
    		int tu = bitmap.getWidth() / 5;// 设置每个小方块的宽和高
    		for (int i = 0; i < imageViews.length; i++) {
    			for (int j = 0; j < imageViews[0].length; j++) {
    				Bitmap bm = Bitmap.createBitmap(bitmap, j * tu, i * tu, tu, tu);
    				imageViews[i][j] = new ImageView(this);
    				imageViews[i][j].setImageBitmap(bm);// 设置每个小方块放 的图案
    				imageViews[i][j].setPadding(2, 2, 2, 2);// 每个图案之间的间距
    				imageViews[i][j].setTag(new GameData(i, j, bm));// 绑定自定义数据
    				imageViews[i][j].setOnClickListener(new View.OnClickListener() {
    					@Override
    					public void onClick(View v) {
    						boolean fiag = isHasByImageView((ImageView) v);
    						Toast.makeText(MainActivity.this, "是否存在" + fiag, Toast.LENGTH_SHORT).show();
    						if (fiag) {
    							changeDataByImageView((ImageView) v);
    						}
    					}
    				});
    			}
    		}
    		// 初始化游戏主界面,并添加若干个小方块
    		gridLayout = (GridLayout) findViewById(R.id.gridLayout);
    		for (int i = 0; i < imageViews.length; i++) {
    			for (int j = 0; j < imageViews[0].length; j++) {
    				gridLayout.addView(imageViews[i][j]);
    
    			}
    		}
    		setNullImageView(imageViews[2][4]);
    
    	}
    
    	public void changeDataByImageView(final ImageView imageView) {
    		// 创建一个动画,设置好方向,移动的距离
    		TranslateAnimation translateAnimation = null;
    		if (imageView.getX() > null_image.getX()) {
    			// 往上移
    			translateAnimation = new TranslateAnimation(0.1f, -imageView.getWidth(), 0.1f, 0.1f);
    		} else if (imageView.getX() < null_image.getX()) {
    			// 往下移
    			translateAnimation = new TranslateAnimation(0.1f, imageView.getWidth(), 0.1f, 0.1f);
    		} else if (imageView.getY() > null_image.getY()) {
    			// 往左移
    			translateAnimation = new TranslateAnimation(0.1f, 0.1f, 0.1f, -imageView.getWidth());
    		} else if (imageView.getY() < null_image.getY()) {
    			// 往右移
    			translateAnimation = new TranslateAnimation(0.1f, 0.1f, 0.1f, imageView.getWidth());
    		}
    		// 设置时常
    		translateAnimation.setDuration(70);
    		// 设置动画结束后是否停留
    		translateAnimation.setFillAfter(true);
    		// 设置动画结束之后真正的把数据交换了
    		translateAnimation.setAnimationListener(new Animation.AnimationListener() {
    			@Override
    			public void onAnimationStart(Animation animation) {
    
    			}
    
    			@Override
    			public void onAnimationRepeat(Animation animation) {
    
    			}
    
    			@Override
    			public void onAnimationEnd(Animation animation) {
    				imageView.clearAnimation();
    				GameData mGameData = (GameData) imageView.getTag();
    				null_image.setImageBitmap(mGameData.bm);
    				GameData mNullGameData = (GameData) null_image.getTag();
    				mNullGameData.bm = mGameData.bm;
    				mNullGameData.p_x = mGameData.p_x;
    				mNullGameData.p_y = mGameData.p_y;
    				setNullImageView(imageView);
    
    			}
    		});
    		// 执行动画
    		imageView.startAnimation(translateAnimation);
    	}
    
    	public void setNullImageView(ImageView nullImageView) {
    		nullImageView.setImageBitmap(null);
    		null_image = nullImageView;
    	}
    
    	public boolean isHasByImageView(ImageView nullImageView) {
    		GameData nullGameData = (GameData) null_image.getTag();
    		GameData nGameData = (GameData) nullImageView.getTag();// null_image替换为nullImageView
    		nullImageView.getTag();
    		if (nullGameData.y == nGameData.y && nGameData.x + 1 == nullGameData.x) {
    			return true;
    		} else if (nullGameData.y == nGameData.y && nGameData.x - 1 == nullGameData.x) {
    			return true;
    		} else if (nullGameData.y == nGameData.y + 1 && nGameData.x == nullGameData.x) {// nGameData.x
    																						// +
    																						// 1
    																						// 替换为nGameData.x
    			return true;
    		} else if (nullGameData.y == nGameData.y - 1 && nGameData.x == nullGameData.x) {// nGameData.x
    																						// +
    																						// 1
    																						// 替换为nGameData.x
    			return true;
    		}
    		return false;
    	}
    
    	class GameData {
    		// 小方块实际位置
    		int x = 0;
    		int y = 0;
    		// 小方块图片位置
    		int p_x = 0;
    		int p_y = 0;
    		public Bitmap bm;
    
    		public GameData(int x, int y, Bitmap bm) {
    			super();
    			this.x = x;
    			this.y = y;
    			this.bm = bm;
    		}
    	}
    }


    qq__42...

    非常感谢!

    2016-08-04 10:24:21

    共 1 条回复 >

  • 阿旭_
    2016-08-02 13:39:36
    	public boolean isHasByImageView(ImageView nullImageView) {
    		GameData nullGameData = (GameData) null_image.getTag();
    		GameData nGameData = (GameData) nullImageView.getTag();//null_image替换为nullImageView
    		nullImageView.getTag();
    		if (nullGameData.y == nGameData.y && nGameData.x + 1 == nullGameData.x) {
    			return true;
    		} else if (nullGameData.y == nGameData.y && nGameData.x - 1 == nullGameData.x) {
    			return true;
    		} else if (nullGameData.y == nGameData.y + 1 && nGameData.x == nullGameData.x) {//nGameData.x + 1 替换为nGameData.x
    			return true;
    		} else if (nullGameData.y == nGameData.y - 1 && nGameData.x == nullGameData.x) {//nGameData.x + 1 替换为nGameData.x
    			return true;
    		}
    		return false;
    	}


    qq__42...

    还是不能移动,我把你的代码直接复制过去了,其它代码没动,然后点击图片以后小方块直接就没有了,也没有变换位置?

    2016-08-03 09:29:14

    共 1 条回复 >

  • 慕尼黑6448748
    2016-08-05 08:23:47

    你现在改好了么?我的也是移动不了,改了上面给的答案以后,只能动一个方块然后就再也动不了了

    qq__42...

    我的改好了,

    2016-08-15 10:05:45

    共 1 条回复 >

  • qq__4290
    2016-08-03 09:28:33

    57a1480e00015ff504300489.jpg

    57a1480f0001f53c04010570.jpg

    还是不能移动,我把你的代码直接复制过去了,其它代码没动,然后点击图片以后小方块直接就没有了,也没有变换位置?


快速实现不一样的移动拼图

实现一个支持手势的移动拼图小游戏,手把手带你开发小游戏

15576 学习 · 67 问题

查看课程

相似问题