Andriod手机游戏入门之旋转图片


今天为大家讲解下怎么在手机里实现图片轮换功能和游戏声音开关功能.

第一效果图:

第二代码:

建立一个WelcomeVIew类

  1. import Android.content.res.Resources;  
  2. import android.graphics.Bitmap;  
  3. import android.graphics.BitmapFactory;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Paint;  
  6. import android.media.MediaPlayer;  
  7. import android.view.MotionEvent;  
  8. import android.view.SurfaceHolder;  
  9. import android.view.SurfaceView;  
  10.   
  11. import com.Quwenzi.QuwenziActivity;  
  12. import com.Quwenzi.R;  
  13. import com.Quwenzi.Thread.WelcomeViewThread;  
  14.   
  15. public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback{  
  16.     //--------类----------//   
  17.     public QuwenziActivity activity;  
  18.     public WelcomeViewThread wv;  
  19.     //--------类----------//   
  20.    
  21.     //--------图片----------//   
  22.     Bitmap brackgroud;  
  23.     Bitmap music;  
  24.     Bitmap musiccols;  
  25.     Bitmap quwenzi;  
  26.     Bitmap wz;  
  27.     Bitmap wz1;  
  28.     Bitmap wz2;  
  29.     Bitmap wz3;  
  30.     Bitmap wz4;  
  31.     Bitmap wz5;  
  32.     //--------图片----------//   
  33.       
  34.     //--------常量----------//   
  35.     public int k=0;  
  36.     public  boolean isSound = true;//是否播放声音   
  37.     MediaPlayer mediaplayer;  
  38.     //--------常量----------//   
  39.     public WelcomeView(QuwenziActivity activity) {// 构造器   
  40.         super(activity);  
  41.         this.activity=activity; //等到activity引用   
  42.         getHolder().addCallback(this);  
  43.         initBimap();//初始化图片   
  44.         this.wv=new WelcomeViewThread(this, getHolder());  
  45.         //创建声音   
  46.         mediaplayer=MediaPlayer.create(activity, R.raw.himi);  
  47.         mediaplayer.setLooping(true);  
  48.         mediaplayer.start();  
  49.   
  50.     }  
  51.     
  52.     private void initBimap() {  
  53.         Resources r = activity.getResources(); // 获取Resources对象   
  54. //      brackgroud=BitmapFactory.decodeResource(r, R.drawable.background);   
  55.         music=BitmapFactory.decodeResource(r,R.drawable.music);  
  56.         musiccols=BitmapFactory.decodeResource(r,R.drawable.musiccols);  
  57.         quwenzi=BitmapFactory.decodeResource(r, R.drawable.quwenzis);  
  58.         wz=BitmapFactory.decodeResource(r,R.drawable.wz);  
  59.         wz1=BitmapFactory.decodeResource(r,R.drawable.wz1);  
  60.         wz2=BitmapFactory.decodeResource(r,R.drawable.wz2);  
  61.         wz3=BitmapFactory.decodeResource(r,R.drawable.wz3);  
  62.         wz4=BitmapFactory.decodeResource(r,R.drawable.wz4);  
  63.           
  64.     }  
  65.     public void onDraw(Canvas canvas){  
  66.         canvas.drawBitmap(quwenzi, 0,0new Paint());  
  67.         canvas.drawBitmap(wz, -1,160new Paint());  
  68.         //声音   
  69.         if(this.isSound){  
  70.             canvas.drawBitmap(music, 280,1,  new Paint());//绘制关闭声音菜单   
  71.         }else{  
  72.             canvas.drawBitmap(musiccols, 280,1,  new Paint());//绘制打开声音   
  73.         }  
  74.       //不断循环图片的地方   
  75.     if(k == 0){  
  76.         canvas.drawBitmap(wz, -1,160null);  
  77.     }  
  78.     else if(k == 1){  
  79.         canvas.drawBitmap(wz1, -1,160null);  
  80.     }  
  81.     else if(k == 2){  
  82.         canvas.drawBitmap(wz2, -1,160null);  
  83.     }  
  84.     else if(k == 3){  
  85.         canvas.drawBitmap(wz3, -1,160null);  
  86.     }  
  87.     else{  
  88.         canvas.drawBitmap(wz4, -1,160null);  
  89.     }  
  90.   
  91.     k = (k+1)%4;//不断循环,4代表旋转速度..   
  92.   
  93.     }  
  94.     public boolean onTouchEvent(MotionEvent event){  
  95.         if(event.getAction()==MotionEvent.ACTION_DOWN){  
  96.             double x = event.getX();  
  97.             double y = event.getY();  
  98.            if (x > 280 && x < 280 + musiccols.getWidth() && y > 1  
  99.                     && y < 1+ musiccols.getHeight()) {  
  100.                  this.isSound =! this.isSound;  //按钮制反   
  101.                 if(!this.isSound){  //判断是否在播放声音   
  102.                     if(this.mediaplayer !=null){  
  103.                         if(this.mediaplayer.isPlaying()){//且当前声音没有在播放   
  104.                             this.mediaplayer.pause();  //停止播放   
  105.                         }  
  106.                     }  
  107.                 }else{  
  108.                     if(this.mediaplayer != null){//当mediaplayer不为空时   
  109.                         if(!this.mediaplayer.isPlaying()){//且当前声音没有在播放   
  110.                             this.mediaplayer.start();//则播放声音   
  111.                         }     
  112.                     }  
  113.                 }  
  114.             }  
  115.         }  
  116.               
  117.         return super.onTouchEvent(event);  
  118.     }  
  119.     @Override  
  120.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  121.             int height) {  
  122.         // TODO Auto-generated method stub   
  123.           
  124.     }  
  125.   
  126.     @Override  
  127.     public void surfaceCreated(SurfaceHolder holder) {  
  128.         wv.setFlag(true);  
  129.         wv.start();  
  130.           
  131.           
  132.     }  
  133.   
  134.     @Override  
  135.     public void surfaceDestroyed(SurfaceHolder holder) {  
  136.         boolean retry =true;  
  137.         while(retry){//停止刷帧线程   
  138.             try {  
  139.                 wv.join(); //等待线程的结束   
  140.                 retry=false;  
  141.             } catch (Exception e) {//不断地循环,直到等待的线程结束   
  142.             }  
  143.         }  
  144.           
  145.     }  
  146.   
  147. }  

第二建立个WelcomeViewThread类

  1. import android.graphics.Canvas;  
  2. import android.view.SurfaceHolder;  
  3.   
  4. import com.Quwenzi.View.WelcomeView;  
  5.   
  6. public class WelcomeViewThread extends Thread{  
  7.     public WelcomeView welcomeVew;  
  8.     boolean flag;  
  9.     int sleepSapn=100;  
  10.     SurfaceHolder surfaceHolder = null;  
  11.     public  WelcomeView welcomeView;  
  12.     public WelcomeViewThread(WelcomeView welcomeView,SurfaceHolder surfaceHolder){  
  13.         this.welcomeVew=welcomeView; //引用   
  14.         this.surfaceHolder=surfaceHolder; //引用   
  15.     }  
  16.    public void run(){  
  17.        Canvas c;   
  18.        c=null;  
  19.        while(flag){  
  20.            try {  
  21.             // 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null   
  22.             c=surfaceHolder.lockCanvas(null);  
  23.             //同步WelcomeView   
  24.             synchronized (this.surfaceHolder) {  
  25.               try {  
  26.                 welcomeVew.onDraw(c);  
  27.             } catch (Exception e) {  
  28.             }  
  29.             }  
  30.             }finally{  
  31.                 if(c!=null){  
  32.                     //更新屏幕显示内容   
  33.                     surfaceHolder.unlockCanvasAndPost(c);  
  34.                 }  
  35.             }  
  36.             try{  
  37.                 Thread.sleep(sleepSapn);  
  38.         } catch (Exception e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.        }  
  42.        
  43.        }  
  44.      public void setFlag(boolean flag){//设置循环标记   
  45.        this.flag=flag;  
  46.    }  
  47. }  

OK完成了,由于看我之前发过两篇游戏基础教程后。相信大家对Activity主类调用WelcomeView页面都很熟悉了吧,再次我不贴Activity类。

相关内容

    暂无相关文章