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

本文将指导您如何在手机上实现图片轮换功能和游戏声音开关功能,包括建立WelcomeVIew类、初始化图片、设置声音开关及播放逻辑等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

第一效果图:

第二代码:

建立一个WelcomeVIew类

import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.media.MediaPlayer; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import com.Quwenzi.QuwenziActivity; import com.Quwenzi.R; import com.Quwenzi.Thread.WelcomeViewThread; public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback{ //--------类----------// public QuwenziActivity activity; public WelcomeViewThread wv; //--------类----------// //--------图片----------// Bitmap brackgroud; Bitmap music; Bitmap musiccols; Bitmap quwenzi; Bitmap wz; Bitmap wz1; Bitmap wz2; Bitmap wz3; Bitmap wz4; Bitmap wz5; //--------图片----------// //--------常量----------// public int k=0; public boolean isSound = true;//是否播放声音 MediaPlayer mediaplayer; //--------常量----------// public WelcomeView(QuwenziActivity activity) {// 构造器 super(activity); this.activity=activity; //等到activity引用 getHolder().addCallback(this); initBimap();//初始化图片 this.wv=new WelcomeViewThread(this, getHolder()); //创建声音 mediaplayer=MediaPlayer.create(activity, R.raw.himi); mediaplayer.setLooping(true); mediaplayer.start(); } private void initBimap() { Resources r = activity.getResources(); // 获取Resources对象 // brackgroud=BitmapFactory.decodeResource(r, R.drawable.background); music=BitmapFactory.decodeResource(r,R.drawable.music); musiccols=BitmapFactory.decodeResource(r,R.drawable.musiccols); quwenzi=BitmapFactory.decodeResource(r, R.drawable.quwenzis); wz=BitmapFactory.decodeResource(r,R.drawable.wz); wz1=BitmapFactory.decodeResource(r,R.drawable.wz1); wz2=BitmapFactory.decodeResource(r,R.drawable.wz2); wz3=BitmapFactory.decodeResource(r,R.drawable.wz3); wz4=BitmapFactory.decodeResource(r,R.drawable.wz4); } public void onDraw(Canvas canvas){ canvas.drawBitmap(quwenzi, 0,0, new Paint()); canvas.drawBitmap(wz, -1,160, new Paint()); //声音 if(this.isSound){ canvas.drawBitmap(music, 280,1, new Paint());//绘制关闭声音菜单 }else{ canvas.drawBitmap(musiccols, 280,1, new Paint());//绘制打开声音 } //不断循环图片的地方 if(k == 0){ canvas.drawBitmap(wz, -1,160, null); } else if(k == 1){ canvas.drawBitmap(wz1, -1,160, null); } else if(k == 2){ canvas.drawBitmap(wz2, -1,160, null); } else if(k == 3){ canvas.drawBitmap(wz3, -1,160, null); } else{ canvas.drawBitmap(wz4, -1,160, null); } k = (k+1)%4;//不断循环,4代表旋转速度.. } public boolean onTouchEvent(MotionEvent event){ if(event.getAction()==MotionEvent.ACTION_DOWN){ double x = event.getX(); double y = event.getY(); if (x > 280 && x < 280 + musiccols.getWidth() && y > 1 && y < 1+ musiccols.getHeight()) { this.isSound =! this.isSound; //按钮制反 if(!this.isSound){ //判断是否在播放声音 if(this.mediaplayer !=null){ if(this.mediaplayer.isPlaying()){//且当前声音没有在播放 this.mediaplayer.pause(); //停止播放 } } }else{ if(this.mediaplayer != null){//当mediaplayer不为空时 if(!this.mediaplayer.isPlaying()){//且当前声音没有在播放 this.mediaplayer.start();//则播放声音 } } } } } return super.onTouchEvent(event); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { wv.setFlag(true); wv.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry =true; while(retry){//停止刷帧线程 try { wv.join(); //等待线程的结束 retry=false; } catch (Exception e) {//不断地循环,直到等待的线程结束 } } } }

第二建立个WelcomeViewThread类

import android.graphics.Canvas; import android.view.SurfaceHolder; import com.Quwenzi.View.WelcomeView; public class WelcomeViewThread extends Thread{ public WelcomeView welcomeVew; boolean flag; int sleepSapn=100; SurfaceHolder surfaceHolder = null; public WelcomeView welcomeView; public WelcomeViewThread(WelcomeView welcomeView,SurfaceHolder surfaceHolder){ this.welcomeVew=welcomeView; //引用 this.surfaceHolder=surfaceHolder; //引用 } public void run(){ Canvas c; c=null; while(flag){ try { // 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null c=surfaceHolder.lockCanvas(null); //同步WelcomeView synchronized (this.surfaceHolder) { try { welcomeVew.onDraw(c); } catch (Exception e) { } } }finally{ if(c!=null){ //更新屏幕显示内容 surfaceHolder.unlockCanvasAndPost(c); } } try{ Thread.sleep(sleepSapn); } catch (Exception e) { e.printStackTrace(); } } } public void setFlag(boolean flag){//设置循环标记 this.flag=flag; } }

OK完成了,由于看我之前发过两篇游戏基础教程后。相信大家对Activity主类调用WelcomeView页面都很熟悉了吧,再次我不贴Activity类。如果实在不懂的话,可以留下邮箱地址..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值