Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)

Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)

 

Android studio五年经验教你如何:花费了2周快速开发卡牌杀系类游戏,核心思路分享之图片绘制

卡牌杀效果-Android studio游戏开发,如何打造类似三国杀英雄杀类游戏

相关源码 学习加群:

Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)_第1张图片

本篇主题:

SufaceView提供一个Canvas, Canvas不能拥有View,所以没有直接DrawView的用法,也不能Canvas.draw(layout),但可以 layout.draw(Canvas) 【听不懂可以直接跳过,进入下面主题】

Sufaceview主要负责绘制Rect 以及Bitmap

Sufaceview的核心任务就是绘制bitmap 以及绘制矩形  【涉及 坐标就有坐标点--- left top (左上角的(x,y))以及 bitmap 的 宽 高】

游戏设计不想后期混乱,导致霸鸽四起,始终坚持 设计模式的单一职责 

一个类负责一个任务,一个类管理该任务的所有方法

例如指的的是:任务开始,任务暂停,任务结束

 

如果你有一个View ,需要在Sufaceview中绘制,则你需要先转换成Bitmap,例如这段代码【第一段 听不懂 看了下面代码..  】

public static Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    v.draw(c);
    return b;
}

 

而基于对Bitmap的解析,谷歌官方推荐使用Glide,安排,导入配置

repositories {
  google()
  mavenCentral()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.12.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}

 

创建一个Bitmap管理生产类

public class BitmapUtils {
    public static Bitmap ScaledBitmap(Bitmap bitmap,int width,int height){
      return   Bitmap.createScaledBitmap(bitmap, width, height, false);
    }

    public static   Bitmap loadBitmap(Activity activity,int mip, int w, int h) throws ExecutionException, InterruptedException {
        Bitmap load = Glide.with(activity).asBitmap()
                .load(mip)
                .submit(300,300).get();

        return BitmapUtils.ScaledBitmap(load,w,h);}

}

调用的时候  

BitmapUtils .loadBitmap(Activity activity,int mip, int w, int h)

activity 你的Activity

mip--项目中图片的id,例如:R.drawable.abc 或者R.mipmap.abc

w--指定目标宽度

h--指定目标高度

好了进入主题,sufaceview的绘制Bitmap:

private Bitmap load ;//必须是全局变量,不能是局部变量,Surfaceview运行后是一个死循环,局部变量会占据无限内存导致卡死 
public void drawbg(Canvas canvas,int mipmap,int w,int h,int left,int top) {
        // Log.v("----11","p1 draw ok");
        try {
            if (load==null)  {
                load =loadBitmap(mipmap,w,h);//确保非空且只允许只有一个bitmap避免性能出错
            }else {
                canvas.drawBitmap(load,left,top,null);//核心语句,绘制赋予左上角坐标(left,top)的Bitmap

            }
        } catch (ExecutionException e) {
            e.printStackTrace();

        } catch (InterruptedException e) {
            e.printStackTrace();

        }



    }

 

 

 

 

 

你可能感兴趣的:(卡牌杀,canvas,android,android,studio,游戏开发,java)