亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

滑動拼圖,點擊可滑動的拼圖,那個拼圖就消失了

照著視頻 ?快速實現不一樣的移動拼圖 ?寫下來的程序,寫到2-3的時候,我點擊可滑動方塊,本來應該是和空方塊進行交換的,但是卻沒有進行交換,而本來的方塊也消失了,就造成了,我點擊空方塊旁邊有圖案的方塊之后,空方塊還是空的,有圖案的方塊也消失了。

正在回答

3 回答

把整個Activity代碼貼上來,我幫你找找原因

0 回復 有任何疑惑可以回復我~
package?com.example.shinelon.android01;

import?android.graphics.Bitmap;
import?android.graphics.drawable.BitmapDrawable;
import?android.support.v7.app.AppCompatActivity;
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?AppCompatActivity?{

????/**
?????*?利用二維數組創建?若干個?游戲方塊
?????*/
????private?ImageView[][]?iv_game_arr?=?new?ImageView[3][5];
????/*游戲主界面*/
????private?GridLayout?main_game;
???/*當前空方塊的實例的保存*/
????private?ImageView?iv_null_ImageView;
????@Override
????protected?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_main);
????????/*初始化游戲方塊*/
????????Bitmap?bigBm?=?((BitmapDrawable)?getResources().getDrawable(R.drawable.ic_game_tu06)).getBitmap();?//獲取?一張大圖片
????????int?tuWandH?=?bigBm.getWidth()?/?5;
????????for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
????????????for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
????????????????Bitmap?bm?=?Bitmap.createBitmap(bigBm,?j?*?tuWandH,?i?*?tuWandH,?tuWandH,?tuWandH);?????????//根據行跟列切割成小圖片
????????????????iv_game_arr[i][j]?=?new?ImageView(this);
????????????????iv_game_arr[i][j].setImageBitmap(bm);??//設置每個游戲方塊的圖標
????????????????iv_game_arr[i][j].setPadding(2,?2,?2,?2);
????????????????iv_game_arr[i][j].setTag(new?GameData(i,j,bm));??//綁定自定義的數據
????????????????iv_game_arr[i][j].setOnClickListener(new?View.OnClickListener()?{
????????????????????@Override
????????????????????public?void?onClick(View?v)?{
??????????????????????boolean?flag?=??isHasByNullImageView((ImageView)v);
????????????????????????Toast.makeText(MainActivity.this,?"當前位置是否存在"+flag,?Toast.LENGTH_SHORT).show();
????????????????????????if(flag){
????????????????????????????changeDataByImageView((ImageView)?v);
????????????????????????}
????????????????????}
????????????????});
????????????}
????????}
????????/*初始化主界面,并添加游戲方塊*/
????????main_game?=?(GridLayout)?findViewById(R.id.main_game);
????????for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
????????????for?(int?j?=?0;?j?<?iv_game_arr[i].length;?j++)?{
????????????????main_game.addView(iv_game_arr[i][j]);
????????????}
????????}
????????setNullImageView(iv_game_arr[2][2]);???//獲取摸個圖片,調用setNullImageView方法
????}
????/**
?????*?利用動畫結束之后交換兩個方塊的數據
?????*/
????public?void?changeDataByImageView(final?ImageView?imageView){
?????????//創建動畫,設置好方向,移動的距離
????????TranslateAnimation??translateAnimation?=?null;
????????if(imageView.getX()>iv_null_ImageView.getX()){??//當前點擊的方塊在空方塊的下方
?????????//?往上移動
????????????translateAnimation??=new?TranslateAnimation(0.1f,?-imageView.getWidth(),0.1f,0.1f);
????????}else?if(imageView.getX()<iv_null_ImageView.getX()){??//當前點擊的方塊在空方塊的上方
????????????//?往下移動
????????????translateAnimation??=new?TranslateAnimation(0.1f,?imageView.getWidth(),0.1f,0.1f);
????????}else?if(imageView.getY()>iv_null_ImageView.getY()){??//當前點擊的方塊在空方塊的右方
????????????//?往左移動
????????????translateAnimation??=new?TranslateAnimation(0.1f,?0.1f,0.1f,-imageView.getWidth());
????????}else?if(imageView.getY()<iv_null_ImageView.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?onAnimationEnd(Animation?animation)?{

????????????}

????????????@Override
????????????public?void?onAnimationRepeat(Animation?animation)?{
????????????????imageView.clearAnimation();
????????????????GameData?GameData?=?(GameData)imageView.getTag();
????????????????iv_null_ImageView.setImageBitmap(GameData.bm);
????????????????GameData?NullGameData?=?(GameData)iv_null_ImageView.getTag();
????????????????NullGameData.bm?=?GameData.bm;
????????????????NullGameData.p_x=GameData.p_x;
????????????????NullGameData.p_y?=GameData.p_y;
????????????????setNullImageView(imageView);
????????????}
????????});
????????//執行動畫
????????imageView.startAnimation(translateAnimation);
????}
????/**
?????*?設置某個方塊為空
?????*/
????public?void?setNullImageView(ImageView?imageView)?{
????????imageView.setImageBitmap(null);
????????iv_null_ImageView?=?imageView;
????}

????//判斷當前方塊是否與空的方塊是相鄰的關系
????public?boolean?isHasByNullImageView(ImageView?imageView)?{

????????GameData?NullGameData?=?(GameData)iv_null_ImageView.getTag();
????????GameData?GameData?=?(GameData)imageView.getTag();
????????if(NullGameData.y==GameData.y&&NullGameData.x==GameData.x+1){????//當前點擊為上方
????????????return??true;
????????}else?if(NullGameData.y==GameData.y&&NullGameData.x==GameData.x-1){??//當前點擊為下方
????????????return??true;
????????}else?if(NullGameData.y==GameData.y+1&&NullGameData.x==GameData.x){??//當前點擊為左方
????????????return??true;
????????}else?if(NullGameData.y==GameData.y-1&&NullGameData.x==GameData.x){??//當前點擊為右方
????????????return??true;
????????}
????????return?false;
????}
????/**為每個小方塊綁定數據*/
????class??GameData{
????????/**每個方塊的實際位置x*/
????????public?int?x?=?0;
????????/**每個小方塊的實際位置y*/
????????public??int?y?=?0;
????????/**每個小方塊圖片*/
????????public??Bitmap?bm;
????????/**每個小方塊圖片的實際位置y*/
????????public?int?p_x?=?0;
????????/**每個小方塊圖片的實際位置y*/
????????public?int?p_y?=?0;
????????public?GameData(int?x,?int?y,?Bitmap?bm)?{
????????????this.x?=?x;
????????????this.y?=?y;
????????????this.bm?=?bm;
????????????this.p_x?=?x;
????????????this.p_y?=?y;
????????}
????}
}

為什么交換的時候只是圖片交換了,原來初始化空白的實際位置不變,導致只能原來圖片只能和初始化的空白位置交換。

0 回復 有任何疑惑可以回復我~

@阿旭_

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

滑動拼圖,點擊可滑動的拼圖,那個拼圖就消失了

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號