android studio gridlayout拼图游戏(一)让图片完整显示
来源:互联网 发布:网络几分钟断一次 编辑:程序博客网 时间:2024/05/17 03:47
在慕课网上看到一个拼图游戏的视频,写了一个程序代码:
public class MainActivity extends AppCompatActivity { private boolean gamestart=false; private boolean isrun=false; private ImageView[][] iv_game_arr=new ImageView[3][5]; private GridLayout game; private ImageView nullimg; private GestureDetector gestureDetector; @Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { gestureDetector.onTouchEvent(ev); return super.dispatchTouchEvent(ev); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gestureDetector=new GestureDetector(this, new GestureDetector.OnGestureListener() { @Override public boolean onDown(MotionEvent motionEvent) { return false; } @Override public void onShowPress(MotionEvent motionEvent) { } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { return false; } @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { return false; } @Override public void onLongPress(MotionEvent motionEvent) { } @Override public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { int type=getGesture(motionEvent.getX(),motionEvent.getY(),motionEvent1.getX(),motionEvent1.getY()); changeGesture(type); return true; } }); game=(GridLayout)findViewById(R.id.grid); Bitmap bigm=((BitmapDrawable)getResources().getDrawable(R.drawable.pin)).getBitmap(); int tuW=bigm.getWidth()/5; for (int i=0;i<iv_game_arr.length;i++){ for (int j=0;j<iv_game_arr[i].length;j++){ Bitmap bm=Bitmap.createBitmap(bigm,j*tuW,i*tuW,tuW,tuW); 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 view) { boolean flag=isNear((ImageView) view);// Toast.makeText(MainActivity.this,""+flag,Toast.LENGTH_SHORT).show(); if (flag){ Exchange((ImageView)view); } } }); } } for (int i=0;i<iv_game_arr.length;i++) { for (int j = 0; j < iv_game_arr[i].length; j++) { GridLayout.LayoutParams p = new GridLayout.LayoutParams(); p.width = Resources.getSystem().getDisplayMetrics().widthPixels / 5; p.height = p.width; game.addView(iv_game_arr[i][j], p); } } empty(iv_game_arr[2][4]); random(); gamestart=true; } private void isGameOver(){ boolean isGameover=true; for (int i=0;i<iv_game_arr.length;i++){ for (int j=0;j<iv_game_arr[i].length;j++){ if (iv_game_arr[i][j]==nullimg){ continue; } GameData gameData=(GameData)iv_game_arr[i][j].getTag(); if (gameData.isTrue()){ isGameover=false; break; } } } if (isGameover){ Toast.makeText(this,"over",Toast.LENGTH_SHORT).show(); } } private void random(){ for (int i=0;i<20;i++){ int type=(int)(Math.random()*4)+1; changeGesture(type,false); } } private void changeGesture(int type){ changeGesture(type,true); } private void changeGesture(int type,boolean isAnim){ GameData gameData=(GameData)nullimg.getTag(); int newx=gameData.x; int newy=gameData.y; if (type==1){ newx++; }else if (type==2){ newx--; }else if (type==3){ newy++; }else if (type==4){ newy--; } if (newx>=0&&newx<iv_game_arr.length&&newy>=0&&newy<iv_game_arr[0].length){ if (isAnim){ Exchange(iv_game_arr[newx][newy]); }else { Exchange(iv_game_arr[newx][newy],isAnim); } }else { } } //gesture 1:up;2:down;3:left;4:right private int getGesture(float start_x,float start_y,float end_x,float end_y){ boolean isLeftorRight=(Math.abs(start_x-start_y)>Math.abs(start_y-end_y))?true:false; if (isLeftorRight){ boolean isLeft=start_x-end_x>0?true:false; if (isLeft){ return 3; }else { return 4; } }else { boolean isUp=start_y-end_y>0?true:false; if (isUp){ return 1; }else { return 2; } } } private void Exchange(final ImageView imageView){ Exchange(imageView,true); } private void Exchange(final ImageView imageView,boolean isAnim){ if (isrun){ return; } if (!isAnim){ GameData gameData=(GameData)imageView.getTag(); nullimg.setImageBitmap(gameData.bitmap); GameData nullData=(GameData)nullimg.getTag(); nullData.bitmap=gameData.bitmap; nullData.p_x=gameData.x; nullData.p_y=gameData.y; empty(imageView); if (gamestart){ isGameOver(); } return; } TranslateAnimation translateAnimation=null; if (imageView.getX()>nullimg.getX()){ translateAnimation=new TranslateAnimation(0.1f,-imageView.getWidth(),0.1f,0.1f); }else if (imageView.getX()<nullimg.getX()){ translateAnimation=new TranslateAnimation(0.1f,imageView.getWidth(),0.1f,0.1f); }else if (imageView.getY()>nullimg.getY()){ translateAnimation=new TranslateAnimation(0.1f,0.1f,0.1f,-imageView.getHeight()); }else if (imageView.getY()<nullimg.getY()){ translateAnimation=new TranslateAnimation(0.1f,0.1f,0.1f,imageView.getHeight()); } translateAnimation.setDuration(70); translateAnimation.setFillAfter(true); translateAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { isrun=true; } @Override public void onAnimationEnd(Animation animation) { isrun=false; imageView.clearAnimation(); GameData gameData=(GameData)imageView.getTag(); nullimg.setImageBitmap(gameData.bitmap); GameData nullData=(GameData)nullimg.getTag(); nullData.bitmap=gameData.bitmap; nullData.p_x=gameData.x; nullData.p_y=gameData.y; empty(imageView); if (gamestart){ isGameOver(); } } @Override public void onAnimationRepeat(Animation animation) { } }); imageView.startAnimation(translateAnimation); } private void empty(ImageView imageView){ imageView.setImageBitmap(null); nullimg=imageView; } private Boolean isNear(ImageView imageView){ GameData nullgrid=(GameData)nullimg.getTag(); GameData normalgrid=(GameData)imageView.getTag(); if (nullgrid.y==normalgrid.y&&normalgrid.x+1==nullgrid.x){//upper than the empltygrid return true; }else if (nullgrid.y==normalgrid.y&&normalgrid.x==nullgrid.x+1){ return true; }else if (nullgrid.y+1==normalgrid.y&&normalgrid.x==nullgrid.x){ return true; }else if (nullgrid.y==normalgrid.y+1&&normalgrid.x==nullgrid.x){ return true; } return false; } //each grid data:x,y class GameData{ private int x; private int y; private Bitmap bitmap; private int p_x; private int p_y; private GameData(int x, int y,Bitmap bitmap) { this.x = x; this.y = y; this.bitmap = bitmap; this.p_x = x; this.p_y = y; } private boolean isTrue(){ if (x==p_x&&y==p_y){ return true; } return false; } }}
0 0
- android studio gridlayout拼图游戏(一)让图片完整显示
- ios拼图游戏(一)之分割图片
- 让Visual Studio 显示完整路径
- 项目:拼图游戏(一)
- Android显示GIF动画完整示例(一)
- Android高效显示图片详解(一) .
- Android高效显示图片详解(一)
- Android高效显示图片详解(一)
- Android高效显示图片详解(一)
- Android高效显示图片详解(一)
- Android高效显示图片详解(一)
- 安卓拼图游戏(一)
- 安卓拼图游戏(一)
- opencv显示完整图片
- ImageView完整显示图片
- Android 让图片横屏显示
- Android怎么让RadioButton图片居中显示
- J2ME 拼图游戏 快速开发 全过程 (一)——最佳成绩显示界面
- logback 日志级别不可控问题解决
- Python Requests 操作指南
- 十六、Hadoop1.0伪集群安装(上)
- 微信公众平台开发入门教程(SAE方倍工作室)
- HttpClient 4.5使用(一)
- android studio gridlayout拼图游戏(一)让图片完整显示
- redis DB Key Value design
- gsoap使用示例
- 113. Path Sum II
- CentOS+Nginx一步一步开始配置负载均衡
- iOS加载控制器的三种方式
- Kali Linux渗透基础知识整理(一):信息搜集 20160726
- CNN进展与技巧(下)
- 阿里数据库迁移项目yugong