package com.aiai.www; import java.util.Random; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; public class PuzzleActivity extends Activity implements OnClickListener { private ImageView[] imageViewVector = new ImageView[9]; private Bitmap[] images = new Bitmap[9]; private int[] randomIds; private Bitmap image_null = null; public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub int action = event.getAction(); if(MotionEvent.ACTION_DOWN==action) System.out.println("point x="+event.getX()+",y="+event.getY()); return super.onTouchEvent(event); } public PuzzleActivity() { randomIds = new int[9]; randomIds[0] = 8; randomIds[1] = 8; randomIds[2] = 8; randomIds[3] = 8; randomIds[4] = 8; randomIds[5] = 8; randomIds[6] = 8; randomIds[7] = 8; randomIds[8] = 8; System.out.println("PuzzleActivity construct"); } protected void onCreate(Bundle savedInstanceState) { this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.puzzle); Bitmap localBitmap = getBitmapFromResOrSDCard(getIntent().getExtras()); initImageViewVector(); splitImages(localBitmap, this.images); startGame(); } private void startGame() { // TODO Auto-generated method stub this.randomIds[8] =8; this.images[8] = null; this.imageViewVector[8].setImageBitmap(null); this.image_null=BitmapFactory.decodeResource(getResources(), R.drawable.img_null); generateRandomArray(); while((checkValidRandom(randomIds,8)==false)) { generateRandomArray(); } setImageToImageView(); } private void generateRandomArray() { // TODO Auto-generated method stub Random localRandom = new Random(); int i = 0; for (int j = localRandom.nextInt(8); ; j = localRandom.nextInt(8)) { if (checkRepeat(j, this.randomIds, i)) continue; this.randomIds[i] = j; System.out.println("randomIds["+i+"]="+randomIds[i]); i++; if( i>= 8) break; } } private boolean checkValidRandom(int[] paramrandomIds,int cnt) { int sum = 0; //éåºæ°æ»å // int tmp=0; for(int i = 0; i < cnt ; i++) { for(int j=0 ; j <= i ; j++) { if(paramrandomIds[i] < paramrandomIds[j]) { // tmp++; sum++; // System.out.println("sum = "+sum); } } // System.out.println("checkValidRandom paramrandomIds["+i+"]=lixu:"+tmp); // tmp=0; } if ((sum & 1) == 0) //æ¯å¶æ° { // System.out.println("checkvalidrandom true sum = "+sum); return true; } else { //System.out.println("checkvalidrandom false"); return false; //æ¯å¥æ° } } private boolean checkRepeat(int j, int[] paramrandomIds, int i) { // TODO Auto-generated method stub //compare paramrandomIds[0]--[i-1] to j if(i==0) { //System.out.println("return false"); return false; } //System.out.println("#i="+i+"#"); for ( ; i >= 1 ; i--) { //System.out.println("paramrandomIds["+(i-1)+"]="+randomIds[i-1]); if(paramrandomIds[i-1]==j) { //System.out.println("return true"); return true; } } // System.out.println("return false2"); return false; } private void setImageToImageView() { // TODO Auto-generated method stub for (int i = 0; ; i++) { if (i >= 8) return; ImageView localImageView = this.imageViewVector[i]; int j = this.randomIds[i]; localImageView.setImageBitmap(this.images[j]); } } private void splitImages(Bitmap paramBitmap, Bitmap[] paramArrayOfBitmap) { // TODO Auto-generated method stub Bitmap localBitmap = paramBitmap; int i = paramBitmap.getWidth(); int j = paramBitmap.getHeight(); if ((i != 320) || (j != 480)) { float f1 = (320) /(float) i; float f2 = (480) / (float)j; Matrix localMatrix = new Matrix(); localMatrix.postScale(f1, f2); localBitmap = Bitmap.createBitmap(paramBitmap, 0, 0, i, j, localMatrix, true); //get resized img } int k = (320-5) / 3; int m = (480-5) / 3; for (int n = 0; ; n++) { if (n >= 8) return; int i1 = (320 / 3) * (n % 3); int i2 = (480 / 3) * (n / 3); paramArrayOfBitmap[n] = Bitmap.createBitmap(localBitmap, i1, i2, k, m); } } private void initImageViewVector() { // TODO Auto-generated method stub this.imageViewVector[0] = ((ImageView)findViewById(R.id.imageView1)); this.imageViewVector[1] = ((ImageView)findViewById(R.id.imageView2)); this.imageViewVector[2] = ((ImageView)findViewById(R.id.imageView3)); this.imageViewVector[3] = ((ImageView)findViewById(R.id.imageView4)); this.imageViewVector[4] = ((ImageView)findViewById(R.id.imageView5)); this.imageViewVector[5] = ((ImageView)findViewById(R.id.imageView6)); this.imageViewVector[6] = ((ImageView)findViewById(R.id.imageView7)); this.imageViewVector[7] = ((ImageView)findViewById(R.id.imageView8)); this.imageViewVector[8] = ((ImageView)findViewById(R.id.imageView9)); for (int i = 0; ; i++) { if (i >= 9) return; this.imageViewVector[i].setOnClickListener(this); } } private Bitmap getBitmapFromResOrSDCard(Bundle extras) { // TODO Auto-generated method stub return BitmapFactory.decodeResource(getResources(), R.drawable.jinsha); //return null; } public void onClick(View arg0) { // TODO Auto-generated method stub // System.out.printf("value=%x\n",arg0.getId()); int i=-1; switch(arg0.getId()) { case R.id.imageView1: i = 0; break; case R.id.imageView2: i = 1; break; case R.id.imageView3: i = 2; break; case R.id.imageView4: i = 3; break; case R.id.imageView5: i = 4; break; case R.id.imageView6: i = 5; break; case R.id.imageView7: i = 6; break; case R.id.imageView8: i = 7; break; case R.id.imageView9: i = 8; break; default: System.out.println("view default"); } if(i<=8 && i>=0) checkPosition(i); } private void changePosition(int paramInt1, int paramInt2) { int i = this.randomIds[paramInt1]; this.randomIds[paramInt1] = this.randomIds[paramInt2]; this.randomIds[paramInt2] = i; System.out.println("i="+i); System.out.println("paraint1="+paramInt1+",paraint2="+paramInt2); System.out.println("1randomIds["+paramInt1+"]="+(randomIds[paramInt1])+",2randomIds["+paramInt2+"]="+(randomIds[paramInt2])); if(this.randomIds[paramInt1]==8) this.imageViewVector[paramInt1].setImageBitmap(image_null); else this.imageViewVector[paramInt1].setImageBitmap(this.images[this.randomIds[paramInt1]]); if(this.randomIds[paramInt2]==8) this.imageViewVector[paramInt2].setImageBitmap(image_null); else this.imageViewVector[paramInt2].setImageBitmap(this.images[this.randomIds[paramInt2]]); // imageViewVector[8].setImageBitmap(this.images[3]); /* this.imageViewVector[7].setImageBitmap(image_null); this.imageViewVector[8].setImageBitmap(this.images[3]);*/ } private boolean canChangePosition(int paramInt) { if (this.randomIds[paramInt] == 8) return true; else return false; } private void checkPosition(int paramInt) { // TODO Auto-generated method stub if (paramInt / 3 > 0) { int m = paramInt - 3; if ((m >= 0) && (canChangePosition(m))) { changePosition(paramInt, m); return; } } if (paramInt % 3 > 0) { int k = paramInt - 1; if ((k >= 0) && (canChangePosition(k))) { changePosition(paramInt, k); return; } } if (paramInt / 3 < 2) { int j = paramInt + 3; if ((j >= 0) && (j < 9) && (canChangePosition(j))) { changePosition(paramInt, j); return; } } if (paramInt % 3 < 2) { int l = paramInt +1; if ((l >= 0) && (l < 9) && (canChangePosition(l))) { changePosition(paramInt, l); return; } } } }
【上篇】Flex中如何通过dropShadowColor, shadowDirection和shadowDistance样式,创建一个有阴影效果的TextArea控件
【下篇】java.util.ConcurrentModificationException异常 解决方法
【下篇】java.util.ConcurrentModificationException异常 解决方法