首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >BitmapFactory.decodeResource问题

BitmapFactory.decodeResource问题
EN

Stack Overflow用户
提问于 2021-08-22 05:04:37
回答 2查看 197关注 0票数 0

我正在尝试开发一个坦克游戏,所以我需要建立两个不同的位图坦克。我已经创建了一个名为Tank.java的Java类,在这里我创建了我的坦克,但问题是我需要创建两个不同的坦克模型,但是在我的类中,我只能创建一个特定类型的坦克。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Tank {

private int x,y;
int width, height;
Bitmap tank1

Tank(int screenY, Resources res){

    tank1 = BitmapFactory.decodeResource(res, R.drawable.azul_tanque);
    width = tank1.getWidth();
    height = tank1.getHeight();
    width /=4;
    height/=4;

    width *= (int)screenRatioX;
    height *= (int)screenRatioY;

    tank1 = Bitmap.createScaledBitmap(tank1,width,height,false);

    setY(screenY / 2);

}

}

您可以在这里看到这个类,但是问题是我从另一个类调用这个类,它在画布中绘制这个对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class GameView extends SurfaceView implements Runnable {

private Thread thread;
private Boolean isPlaying;

Paint paint;

public static float screenRatioX, screenRatioY;


private Tank tank;
private Tank tank2;


public GameView(Context context, int screenX, int screenY) {
    super(context);

    background = new Background(screenX,screenY,getResources());

    paint = new Paint();

    screenRatioX = 2340f / screenX;
    screenRatioY= 1080f / screenY;

    tank = new Tank(screenY,getResources());
    
    tank2 = new Tank(screenY,getResources());


}

@Override
public void run() {

    while(isPlaying){
        update();
        draw();
        sleep();
    }


}


private void draw(){
    if(getHolder().getSurface().isValid()){
        Canvas canvas = getHolder().lockCanvas();
        canvas.drawBitmap(background.background,background.x,background.y,paint);
        tank.setX((int)(64 * screenRatioX));
        tank2.setX((int)(2000 * screenRatioX));
        canvas.drawBitmap(tank.getTank(),tank.getX(),tank.getY(),paint);
        canvas.drawBitmap(tank2.getTank(),tank2.getX(),tank2.getY(),paint);
        getHolder().unlockCanvasAndPost(canvas);


    }

}

在这个类中,我调用坦克的构造函数,但我不能选择我想要使用的可绘制性。我试图创建另一个具有以下语义的坦克构造函数:

坦克(int screenY,Resources res,可绘制myTank).

在GameView类中,我实例化如下:

getResources.getDrawable(R.drawable.mytank));坦克=新坦克(screenY,getResources,screenY)

但是,当我在新坦克的构造函数上构造坦克时,它不起作用,因为方法:

BitmapFactory.decodeResource R.drawable.azul_tanque BitmapFactory.decodeResource(res,myTank)给出了一个错误,因为需要像第二个参数一样的int,但是在旧的构造函数中,我使用了R.drawable.azul_tanque,我认为第二个参数需要可绘制。

因此,任何人都可以帮助我,我如何编码新的构造函数来创建一个新的坦克,在GameView类中选择可绘制的。

非常感谢你们的时间各位。

Pd:如果您看到这里没有出现的方法,是因为我删除了它们,但是现在,这段代码在我的屏幕上给我画了两个相同的容器。

EN

回答 2

Stack Overflow用户

发布于 2021-08-22 05:23:13

如果您不想使用位图作为参数,您可以执行一个简单的If else操作,并传递一个开关变量。如下所示:

构造者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tank(int screenY, Resources res, int switcher) {
if(switcher == 1)
    tank1 = BitmapFactory.decodeResource(res, R.drawable.azul_tanque);
else
    tank1 = BitmapFactory.decodeResource(res, R.drawable.second_tank);

GameView:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tank = new Tank(screenY,getResources(), 1);

tank2 = new Tank(screenY,getResources(), 0);
票数 1
EN

Stack Overflow用户

发布于 2021-08-22 10:30:51

可以在构造函数中传递可绘制资源id。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tank(int screenY, Resources res, int resourceId){

    tank1 = BitmapFactory.decodeResource(res, resourceId);
    width = tank1.getWidth();
    height = tank1.getHeight();
    width /=4;
    height/=4;

    width *= (int)screenRatioX;
    height *= (int)screenRatioY;

    tank1 = Bitmap.createScaledBitmap(tank1,width,height,false);

    setY(screenY / 2);

}

现在你可以传递坦克的任何图像了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68881595

复制
相关文章
纠结才能写出好代码
程序员的代码修炼应该有两个目标,一个是代码的执行效率,另一个是代码的可读性。朝着这两个目标努力的人很多,但是能够达到目标的人很少。
技术小黑屋
2018/09/04
4030
Android 多媒体开发学习之加载大图片
在实际中,有些时候我们需要从SD卡中加载一张很大的图片到内存中,但是如果你手机存储很小的话,如果直接将这张大图片放入内容就会导致分配失败等异常问题。所以我们就需要一种手段,将大图片也能正常的加载到内存,而不出现异常的情况。
DragonKingZhu
2022/05/08
4940
Android 多媒体开发学习之加载大图片
Android画布Canvas裁剪效果演示--RevealView
图片资源如下图,就是几张灰色和彩色图片 思路是利用画布canvas的裁剪,先画出灰色的图片,再画出彩色图片并对彩色图片进行裁剪,先初始化一些参数 private Paint mPaint = new Paint(); private Map<Integer, List<Bitmap>> bitmap = new HashMap<>(); private float needClipWidth, needClipHeight; private float maxWidth,
aruba
2020/07/03
1.3K0
Android画布Canvas裁剪效果演示--RevealView
Android进阶之绘制-自定义View完全掌握(四)
前面的案例中我们都是使用系统的一些控件通过组合的方式来生成我们自定义的控件,自定义控件的实现还可以通过自定义类继承View来完成。从该篇博客开始,我们通过自定义类继承View来实现一些我们自定义的控件。 我们通过一个案例来学习,现在来实现这样一个效果。
wangweijun
2020/01/20
5400
Android实现人脸识别动画效果
这里我们是用了混合模式来实现圆圈部分的扣除,这里我们用到了PorterDuff.Mode.CLEAR
程序员小顾
2021/12/09
9800
Android Notification
经常熬夜有三大害处:第一,记忆力越来越差;第二,数学水平下降;第四,记忆力越来越差。
大公爵
2018/09/05
1.7K0
Android Notification
在Android中高效的加载大图
将大图加载到内存中总是令人痛苦,因为我们经常会在应用的崩溃报告中看到OOM(Out Of Memory)的bug。大家都知道,Android系统的内存有限。我们必须牢记这一点。
蜻蜓队长
2018/08/03
8280
在Android中高效的加载大图
Android之Bitmap
1. Bitmap比较特别 因为其不可创建 而只能借助于BitmapFactory 而根据图像来源又可分以下几种情况:
张拭心 shixinzhang
2022/11/30
8440
【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )
使用 【Android 安装包优化】WebP 图片格式 ( WebP 图片格式简介 | 使用 Android Studio 转换 WebP 图片格式 ) 二、使用 Android Studio 转换 WebP 图片格式 博客中的转换前后的图片 ;
韩曙亮
2023/03/29
1.3K0
【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )
Android利用SRC_IN模式下的Xfermode实现图片倒影效果
private Bitmap bitmapSrc; private Bitmap bitmapDst; private Paint mPaint = new Paint(); 初始化参数 public InvertImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); set
aruba
2020/07/03
9130
Android利用SRC_IN模式下的Xfermode实现图片倒影效果
Android Bitmap那些事之如何优化内存
“安得广夏千万间,大庇天下寒士俱欢颜”——杜甫。 前言:在帝都住的朋友们都可能会遇到租房子困难的问题(土豪请无视),找房子真是力气活,还耗费时间,占用我宝贵的写博客时间,没办法,谁让咱没钱还想住的好点,努力努力挣钱!!!以上发点牢骚,现在进入正题。上一篇博客《Bitmap那些事之内存占用计算和加载注意事项》,写了Bitmap基础知识和使用Bitmap需要知道的注意事项,这一片博客我会写在Android应用中Bitmap的创建和加载。 1、BitmapFactory使用: 说到图片的加载就必须说Bitmap
程序员互动联盟
2018/03/12
7510
Android Bitmap那些事之如何优化内存
【Android 内存优化】Bitmap 内存占用计算 ( Bitmap 图片内存占用分析 | Bitmap 内存占用计算 | Bitmap 不同像素密度间的转换 )
在 Android 中 Bitmap 对象在内存中存储的的像素格式有两种 : ARGB_8888 和 RGB_555 ;
韩曙亮
2023/03/27
15.4K0
【Android 内存优化】Bitmap 内存占用计算 ( Bitmap 图片内存占用分析 | Bitmap 内存占用计算 | Bitmap 不同像素密度间的转换 )
WebView输入框提示
做基于WebView应用时,页面上有一个输入框,当输入的文字过多时,超过输入框的行数时,输入框能够滚动,这时间问题来了,输入的提示箭头会移动到输入框外,如何解决这个问题呢,查找chromium源码如下:
全栈程序员站长
2022/07/15
1.3K0
Android开发快收藏,这些Bitmap知识点集合没弄明白先别去面试大厂!
Bitmap,位图,本质上是一张图片的内容在内存中的表达形式。它将图片的内容看做是由存储数据的有限个像素点组成;每个像素点存储该像素点位置的ARGB值,每个像素点的ARGB值确定下来,这张图片的内容就相应地确定下来。其中,A代表透明度,RGB代表红绿蓝三种颜色通道值。
Android技术干货分享
2021/03/15
9490
Android开发快收藏,这些Bitmap知识点集合没弄明白先别去面试大厂!
android放大镜效果实现
概述 我相信很多用过英语应用的同学都看多一个放大镜的效果,就是选中一段文字后,会有一个放大镜,这个究竟怎么实现的呢,我们今天来分析分析。 源码分析 public class ShaderView ex
xiangzhihong
2018/01/30
2.4K0
android放大镜效果实现
点击加载更多

相似问题

BitmapFactory.decodeResource

12

Android BitmapFactory.decodeResource多次

10

BitmapFactory.decodeResource返回空值

63

BitmapFactory.decodeResource()忽略inScaled

12

Android: BitmapFactory.decodeResource返回空

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文