滑動拼圖,點擊可滑動的拼圖,那個拼圖就消失了
照著視頻 ?快速實現(xiàn)不一樣的移動拼圖 ?寫下來的程序,寫到2-3的時候,我點擊可滑動方塊,本來應該是和空方塊進行交換的,但是卻沒有進行交換,而本來的方塊也消失了,就造成了,我點擊空方塊旁邊有圖案的方塊之后,空方塊還是空的,有圖案的方塊也消失了。
照著視頻 ?快速實現(xiàn)不一樣的移動拼圖 ?寫下來的程序,寫到2-3的時候,我點擊可滑動方塊,本來應該是和空方塊進行交換的,但是卻沒有進行交換,而本來的方塊也消失了,就造成了,我點擊空方塊旁邊有圖案的方塊之后,空方塊還是空的,有圖案的方塊也消失了。
2016-10-21
舉報
2016-10-21
把整個Activity代碼貼上來,我?guī)湍阏艺以?/p>
2017-06-07
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?{ ????/** ?????*?利用二維數(shù)組創(chuàng)建?若干個?游戲方塊 ?????*/ ????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);?????????//根據(jù)行跟列切割成小圖片 ????????????????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));??//綁定自定義的數(shù)據(jù) ????????????????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]);???//獲取摸個圖片,調(diào)用setNullImageView方法 ????} ????/** ?????*?利用動畫結束之后交換兩個方塊的數(shù)據(jù) ?????*/ ????public?void?changeDataByImageView(final?ImageView?imageView){ ?????????//創(chuàng)建動畫,設置好方向,移動的距離 ????????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); ????????//設置動畫結束之后要真正的把數(shù)據(jù)換了 ????????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); ????????????} ????????}); ????????//執(zhí)行動畫 ????????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; ????} ????/**為每個小方塊綁定數(shù)據(jù)*/ ????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; ????????} ????} }為什么交換的時候只是圖片交換了,原來初始化空白的實際位置不變,導致只能原來圖片只能和初始化的空白位置交換。
2016-10-21
@阿旭_