游戏开发基础part4--Bitmap位图的渲染与操作

知识点1:Bitmap与BitmapFactory

如果想通过一张图片资源文件创建一个位图,则要通过位图工厂来索引图片资源文件,从而生成一张位图实例

BitmapFactory.decodeResource(Resources res,int Id)

作用:通过资源文件生成一张位图

第一个参数:资源实例

第二个参数:资源ID

实例:Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.icon);

知识点2:绘制位图

drawBitmap(Bitmap bitmap,float left,float top,Paint paint)

作用:在画布上绘制一张位图

第一个参数:位图实例

第二、三个参数:位图的X,Y坐标

第四个参数:画笔实例

实例:canvas.drawBitmap(bmp,0,0,paint);

知识点3:旋转位图

rotate(float degrees,float px,float py)

作用:旋转位图

第一个参数:画布旋转的角度

第二、三个参数:画布的旋转点

如果旋转的角度大于0,顺时针旋转,反则逆时针旋转

实例:canvas.rotate(30,bmp.getWidth()/2,bmp.getHeight()/2);

     canvas.drawBitmap(bmp,0,0,paint);

知识点4:对画布的状态的操作

save(): 作用是用于保存当前画布的状态;

restore():作用是恢复上次保存的画布状态;

针对一张位图进行旋转的操作:

首先用画布的save()函数将其画布的状态保存起来,然后进行旋转,紧接着绘制位图,最后当位图绘制完后将画布的状态恢复restore()。

实例:canvas.save();

     canvas.rotate(30,bmp.getWidth()/2,bmp.getHeight()/2);

     canvas.drawBitmap(bmp,0,0,paint);

     canvas.restore();

     canvas.drawBitmap(bmp,100,0,paint);

知识点5:平移位图

translate(float dx, float dy)

作用:平移画布

第一个参数:在X轴上平移画布距离

第二个参数:在Y轴上平移画布距离

实例:canvas.save();

     canvas.translate(10,10);

     canvas.drawBitmap(bmp,0,0,paint)

     canvas.restore();

知识点6:缩放位图

scale(float sx,float sy,float px,float py)

作用:对画布进行缩放

第一个参数:对画布X轴的缩放比例

第二个参数:对画布Y周到缩放比例

第三、四个参数:对画布缩放的起始点

当缩放比例为1时表示画布没有进行缩放;当比例值大于1时表示放大;当比例值小于1且大于0时表示缩小。

实例:canvas.save();

     canvas.scale(2f,2f,50 + bmp.getWidth()/2,50 + bmp.getHeight()/2);

     canvas.drawBitmap(bmp,50,50,paint);

     canvas.restore();

     canvas.drawBitmap(bmp,50,50,paint);

知识点7:镜像反转位图

X轴镜像操作:设置X轴的缩放比例为-1

canvas.scale(-1,1,100 + bmp.getWidth() /2,100 + bmp.getHieght()/2);
Y轴镜像操作:设置Y周的缩放比例为-1

canvas.scale(1,-1,100 + bmp.getWidth() /2 , 100 + bmp.getHeight() /2);

创建项目实例:BitmapProject

项目源代码:

==>MySurfaceView.java

package com.bitmap;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;public class MySurfaceView extends SurfaceView implements Callback,Runnable{//用于控制SurfaceViewprivate SurfaceHolder sfh;//声明一个画笔private Paint paint;//声明一个线程private Thread th;//线程消亡的标识位private boolean flag;//声明一个画布private Canvas canvas;//声明屏幕的宽高private int screenW,screenH;//声明位图对象private Bitmap bmp;public MySurfaceView(Context context){super(context);//实例SurfaceHoldersfh = this.getHolder();//为SurfaceView添加状态监听sfh.addCallback(this);//实例一个画笔paint = new Paint();//设置画笔颜色为白色paint.setColor(Color.WHITE);//设置焦点setFocusable(true);bmp =BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubscreenW = this.getWidth();screenH = this.getHeight();flag = true;//实例线程th = new Thread(this);//启动线程th.start();}/*** 游戏绘图* */public void myDraw(){try {canvas = sfh.lockCanvas();if(canvas != null){canvas.drawColor(Color.BLACK);//----绘制位图//canvas.drawBitmap(bmp, 0,0, paint);//----旋转位图//canvas.save();//canvas.rotate(30, bmp.getWidth()/2, bmp.getHeight()/2);//canvas.drawBitmap(bmp, 0,0, paint);//canvas.restore();//canvas.drawBitmap(bmp, 100, 0, paint);//利用矩阵Matrix实现上面的效果//Matrix mx = new Matrix();//mx.postRotate(30,bmp.getWidth()/2,bmp.getHeight()/2);//canvas.drawBitmap(bmp, mx, paint);//----平移位图//canvas.save();//canvas.translate(20, 20);//canvas.drawBitmap(bmp, 0, 0, paint);//canvas.restore();//----利用矩阵对位图平移//Matrix maT = new Matrix();//maT.postTranslate(20,20);//canvas.drawBitmap(bmp, maT, paint);//----缩放位图//canvas.save();//canvas.scale(2f, 2f, 50 + bmp.getWidth()/2, //  50 + bmp.getHeight()/2);//canvas.drawBitmap(bmp, 50, 50, paint);//canvas.restore();//canvas.drawBitmap(bmp,50,50,paint);//----利用矩阵对位图进行缩放//Matrix maS = new Matrix();//maS.postTranslate(50, 50);//maS.postScale(2f, 2f, 50 + bmp.getWidth()/2, bmp.getHeight()/2);//canvas.drawBitmap(bmp, maS, paint);//canvas.drawBitmap(bmp, 50, 50, paint);/*X轴镜像canvas.save();canvas.scale(-1, 1, bmp.getWidth()/2, bmp.getHeight()/2);canvas.drawBitmap(bmp, 0,0, paint);canvas.restore();canvas.drawBitmap(bmp, 100, 100, paint);*//*Y轴镜像canvas.save();canvas.scale(1, -1, bmp.getWidth()/2, bmp.getHeight()/2);canvas.drawBitmap(bmp, 0, 0, paint);canvas.restore();canvas.drawBitmap(bmp, 100,100, paint);*/}} catch (Exception e){} finally{if(canvas !=null)sfh.unlockCanvasAndPost(canvas);}}/*** 按键事件监听* */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubreturn super.onKeyDown(keyCode, event);}/*** 触屏事件监听* */@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubreturn true;}/*** 游戏逻辑* */private void logic(){}/***运行线程**/@Overridepublic void run() {// TODO Auto-generated method stubwhile(flag){long start = System.currentTimeMillis();myDraw();logic();long end = System.currentTimeMillis();try{if(end - start <50){Thread.sleep(50 - (end - start));}} catch (InterruptedException e){e.printStackTrace();}}}/*** SurfaceView视图状态发生变化,响应此函数*/@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}/*** SurfaceView视图状态消亡时,响应此函数*/@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubflag = false;}}

    

转载于:https://www.cnblogs.com/wwj9413/archive/2012/06/18/2638569.html

Android游戏开发基础part4--Bitmap位图的渲染与操作相关推荐

  1. 浅谈Android游戏开发基础和经验

    Android游戏开发基础和经验是本文要介绍的内容,主要是来了解并学习Android游戏开发的内容实例,具体关于Android游戏开发内容的详解来看本文. 做一个类似俄罗斯方块的android游戏开发 ...

  2. Android游戏开发基础part3--Paint 画笔

    游戏开发基础part3--Paint 画笔 Paint画笔是绘图的辅助类,一般它是作为画布的参数来实现相应的效果,Paint类中包含文字与位图的样式.颜色等属性信息.Paint的常用方法如下: 1.s ...

  3. Android游戏开发基础part2--Canvas画布

    游戏开发基础part2--Canvas画布 又过了一周才继续做总结,四级结束了,应该可以多点时间学习游戏编程了. Canvas画布类是一个在游戏当中担当非常重要的角色,它可以绘制出不同的图形和图片,可 ...

  4. 千锋Android游戏开发基础视频教程-cocos2dMars版

    千锋3G学院_Android游戏开发教程_数独_01.mp4 千锋3G学院_Android游戏开发教程_数独_02.mp4 千锋3G学院_Android游戏开发教程_数独_03.mp4 千锋3G学院_ ...

  5. 我是如何从0开始,在23天里完成一款Android游戏开发的 – Part4~7

    [原文:http://www.open-open.com/news/view/2e89b3] 第 9 天这是一款第一人称视角射击游戏,但它绝不老套 在与人们谈论起这款游戏的时候,为它定义一个明确的分类 ...

  6. android游戏开发 深度解析利用位图绘制rpg地图

    先贴代码 着我们采用surfaceview写 package com.mz.demo;import android.content.Context; import android.graphics.B ...

  7. Android游戏开发项目实战

    Android游戏开发项目实战: 手机游戏开发工程师培训教程(Android4.3.Cocos2d-x.Untity2D/3D.跨平台引擎技术) 课程讲师:厉风行 课程分类:游戏开发 适合人群:初级 ...

  8. 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)

    1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimation ...

  9. android 实现 3d 文字,android 3d 游戏 开发 基础 第10课-2D文字显示.ppt

    <android 3d 游戏 开发 基础 第10课-2D文字显示.ppt>由会员分享,可在线阅读,更多相关<android 3d 游戏 开发 基础 第10课-2D文字显示.ppt(1 ...

最新文章

  1. 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
  2. 浏览器时间久了重新登录_以登录为例讲解什么是全面的测试设计
  3. ftp的主动模式(port)与被动模式(PASV)
  4. 鼠标移动监听的注意事项
  5. Scala中使用两种方式对单词进行次数统计(wordCount)
  6. 团队任务4-每日例会(2018-12-6)
  7. 关于没有commit的死锁问题
  8. Google Duo采用WaveNetEQ填补语音间隙
  9. matlab中rowset什么意思,没什么用的matlab代码1
  10. 大数据之-Hadoop之HDFS_基于JAVA的开发_客户端环境测试---大数据之hadoop工作笔记0055
  11. Delphi XE开发 Android 开机自动启动
  12. 三维浮雕软件 linux,三维立体浮雕软件下载
  13. python平均分及格率优秀率_跪求:请问怎样统计均分、优秀率、及格率、低分率的问题...
  14. 杭电2567寻梦(字符串处理)
  15. centos7配置mysql主从:一主多从
  16. 美国计算机研究生留学签证时间,美国大学研究生录取结果,美国研究生院录取时间和流程一览!附2021秋季截止日期...
  17. Testin云测荣获5G应用企业服务优秀平台奖
  18. 工业物联网平台的效益有哪些
  19. html5工业相机,AVT工业相机
  20. css实现自定义鼠标样式

热门文章

  1. 深度学习(四十五)条件对抗网络
  2. c语言跳至表域跳几个字符,c语言学习最好资料.doc
  3. pwm驱动电机 为什么pwm不能太快_认识直流电机的PWM驱动控制电路
  4. c++求区间第k大数_翔哥炒股经验23 K线形态学50节 第10节:K线区间震荡
  5. Jenkins时区设置为北京时间
  6. VINS简化版本 梳理
  7. 获得BootstrapTable行号index
  8. 操作系统相关机器语言基础部分
  9. ucosii事件控制块------信号量集
  10. input内强制保留小数点后两位 位数不足时自动补0