package?com.example.lee.pintu;
import?android.content.pm.ActivityInfo;
import?android.graphics.Bitmap;
import?android.graphics.drawable.BitmapDrawable;
import?android.os.TransactionTooLargeException;
import?android.support.v7.app.AppCompatActivity;
import?android.os.Bundle;
import?android.view.GestureDetector;
import?android.view.MotionEvent;
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;
import?java.security.PublicKey;
import?android.view.GestureDetector;
public?class?MainActivity?extends?AppCompatActivity?{
????private?ImageView[][]?iv_game_arr?=?new?ImageView[3][5];
????private?GridLayout?gl_main_game;
????private?ImageView?iv_null_Imageview;
???//private?boolean?isAnim?=?false;
/*
*?手勢
*?*/
private?GestureDetector?mDetector;
????@Override
/*
*?設置手勢監(jiān)聽*/
????protected?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//?設置打開為?橫豎屏
????????setContentView(R.layout.activity_main);
????????gl_main_game?=?findViewById(R.id.gl_main_game);
????????Bitmap?bigBm?=?((BitmapDrawable)?getResources().getDrawable(R.mipmap.pintu)).getBitmap();
????????int?tuwandH?=?bigBm.getWidth()?/?5;
????????mDetector=new?GestureDetector(this,?new?GestureDetector.OnGestureListener()?{
????????????@Override
????????????public?boolean?onDown(MotionEvent?e)?{
????????????????return?false;
????????????}
????????????@Override
????????????public?void?onShowPress(MotionEvent?e)?{
????????????}
????????????@Override
????????????public?boolean?onSingleTapUp(MotionEvent?e)?{
????????????????return?false;
????????????}
????????????@Override
????????????public?boolean?onScroll(MotionEvent?e1,?MotionEvent?e2,?float?distanceX,?float?distanceY)?{
????????????????return?false;
????????????}
????????????@Override
????????????public?void?onLongPress(MotionEvent?e)?{
????????????}
????????????@Override
????????????public?boolean?onFling(MotionEvent?e1,?MotionEvent?e2,?float?velocityX,?float?velocityY)?{
????????????????int?type=getDirByGes(e1.getX(),e1.getY(),e2.getX(),e2.getY());
?????????????//?Toast.makeText(MainActivity.this,""+type,Toast.LENGTH_SHORT).show();
????????????????changeByDir(type);
????????????????return?false;
????????????}
????????});
????????/*?初始化方塊*/
????????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?GameDate(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,"位置關(guān)系是否存在"+flag,Toast.LENGTH_SHORT).show();
????????????????????????if?(flag){
????????????????????????????changeDateByImageview((ImageView)?v);
????????????????????????}
????????????????????}
????????????????});
????????????}
????????}
????????/*添加至游戲界面*/
????????for?(int?i?=?0;?i?<?iv_game_arr.length;?i++)?{
????????????for?(int?j?=?0;?j?<?iv_game_arr[0].length;?j++)?{
????????????????gl_main_game.addView(iv_game_arr[i][j]);
????????????}
????????????setNullImageView(iv_game_arr[2][4]);
????????//?randomMove();
????????}
????}
????@Override
????public?boolean?onTouchEvent(MotionEvent?event)?{
????????return?mDetector.onTouchEvent(event);
????}
????/**
?*??1?上?2?下?3?左?4右
?*
?*/
//重載
???/*?public?void?changeByDir(int?type){
????????changeByDir(type,true);
????}*/
????public?void?changeByDir(int?type/*,boolean?isAnim*/){
????????GameDate?mNullGameDate=?(GameDate)?iv_null_Imageview.getTag();
????????int?new_x=mNullGameDate.x;
????????int?new_y=mNullGameDate.y;
????????if?(type==1){
new_x++;
????????}else?if?(type==2){
new_x--;
????????}else?if?(type==3){
new_y++;
????????}else?if?(type==4){
new_y--;
????????}
????????if?(new_x>=0&&new_x<iv_game_arr.length&&new_y>=0&&new_y<iv_game_arr[0].length){
???????????/*?if?(isAnim)?{*/
????????????????changeDateByImageview(iv_game_arr[new_x][new_y]);/*
????????????}else{
????????????????changeDateByImageview(iv_game_arr[new_x][new_y],isAnim);
????????????}*/
????????}else{
????????????//?不操作
????????}
????}
????public??int?getDirByGes?(float?start_x,float?start_y,float?end_x,float?end_y){
????????boolean?isLRorUD=(Math.abs(start_x-end_x)>Math.abs(start_y-end_y))?true:false;
????????if?(isLRorUD){
????????????boolean?isL=start_x-end_x?>0?true:false;
????????????if?(isL){
????????????????return??3;
????????????}
????????????else?{
????????????????return?4;
????????????}
????????}
????????else?{
????????????boolean?isU=start_y-end_y?>0?true:false;
????????????if?(isU){
????????????????return??1;
????????????}
????????????else?{
????????????????return?2;
????????????}
????????}
????}
//打亂順序
????/*public?void?randomMove(){
????????for?(int?i=1;i<10;i++){
????????????int?type?=(int?)?(Math.random()*4)+1;
????????????changeByDir(type,false);
????????}
????}
*/
//方法的重載
/*public?void?changeDateByImageview(final?ImageView?imageView){
????????changeDateByImageview(imageView,true);
}*/
public?void?changeDateByImageview(final?ImageView?imageView/*,boolean?isAnim*/)?{
/*if?(!isAnim){
????GameDate?mGameDate?=?(GameDate)?imageView.getTag();
????????????????iv_null_Imageview.setImageBitmap(mGameDate.bm);
????????????????GameDate?mNullGameDate?=?(GameDate)?iv_null_Imageview.getTag();
????????????????mNullGameDate.bm?=?mGameDate.bm;
????????????????mNullGameDate.p_X?=?mGameDate.p_X;
????????????????mNullGameDate.p_Y?=?mGameDate.p_Y;
????????????????setNullImageView(imageView);
????????????????return;
}*/
????????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);??//??結(jié)束后是否停留
????????translateAnimation.setAnimationListener(new?Animation.AnimationListener()?{
????????????@Override
????????????public?void?onAnimationStart(Animation?animation)?{
????????????}
????????????@Override
????????????public?void?onAnimationEnd(Animation?animation)?{
????????????????imageView.clearAnimation();
????????????????GameDate?mGameDate?=?(GameDate)?imageView.getTag();
????????????????iv_null_Imageview.setImageBitmap(mGameDate.bm);
????????????????GameDate?mNullGameDate?=?(GameDate)?iv_null_Imageview.getTag();
????????????????mNullGameDate.bm?=?mGameDate.bm;
????????????????mNullGameDate.p_X?=?mGameDate.p_X;
????????????????mNullGameDate.p_Y?=?mGameDate.p_Y;
????????????????setNullImageView(imageView);
????????????}
????????????@Override
????????????public?void?onAnimationRepeat(Animation?animation)?{
????????????}
????????});
????????imageView.startAnimation(translateAnimation);
????}
????public?void?setNullImageView(ImageView?mImageView)?{
??????mImageView.setImageBitmap(null);
????????iv_null_Imageview=mImageView;
????}
????public??boolean?ishasByNullImageview(ImageView?imageView){
????????GameDate?mNullGameDate=?(GameDate)?iv_null_Imageview.getTag();
????????GameDate?mGameDate=?(GameDate)?imageView.getTag();
????????if?(mNullGameDate.y==mGameDate.y&&mNullGameDate.x==mGameDate.x+1)
????????{
????????????return?true;
????????}
????????else?if?(mNullGameDate.y==mGameDate.y&&mNullGameDate.x==mGameDate.x-1){
????????????return?true;
????????}??else?if?(mNullGameDate.y==mGameDate.y+1&&mNullGameDate.x==mGameDate.x){
????????????return?true;
????????}??else?if?(mNullGameDate.y==mGameDate.y-1&&mNullGameDate.x==mGameDate.x){
????????????return?true;
????????}
????????return?false;
???}
class?GameDate{
????????public?int?x=0;??//??方塊位置
????????public??int?y=0;
????????public?Bitmap?bm;
????????public??int?p_X=0;??//?圖片位置
????????public??int?p_Y=0;
????????public??GameDate(int?x,int?y,Bitmap?bm){
????????????super();
????????????this.x=x;
????????????this.y=y;
????????????this.bm=bm;
????????????this.p_X=p_X;
????????????this.p_Y=p_Y;
????????}
}
?}
2020-07-07
我和你一樣,你怎么解決了?在做實訓,求教教我
2018-10-21
GameData的構(gòu)造方法是不是有問題。