drawBitmap不是全屏显示

3
我使用onDraw方法来展示图片,代码如下:
public void onDraw(Canvas canvas) {
     super.onDraw(canvas);
     Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.photo0);
     canvas.drawColor(Color.BLACK);
     canvas.drawBitmap(background, 0, 0, null);

我想将这张图片设置为背景,但它只显示在屏幕的一部分。如何将其设置为全屏?

有一种方法可以从xml中将图像设置为背景,并从onDraw方法中绘制其他图像在此图像上吗?

2个回答

16

试试这个:

...
Rect dest = new Rect(0, 0, getWidth(), getHeight());
Paint paint = new Paint();
paint.setFilterBitmap(true);
canvas.drawBitmap(background, null, dest, paint);

这会将位图的一部分("null" 表示整个位图)渲染到由 dest 指定的屏幕区域(在本例中为视图的整个区域)。

请注意,这可能会改变纵横比,取决于背景,您可能需要修复它。


1
这会改变图像的质量。如果我从xml将图像设置为背景,它看起来很好,但是像这样就不清晰了。 - Gabrielle
为了提高质量,创建一个Paint对象并调用setFilterBitmap(true)。这将把默认的“最近邻”采样替换为“线性”采样。 - Pal Szasz
已经尝试过,但图像仍然只填充了较大画布的一部分。 - TPG

0

这对我来说是有效的。

      WindowManager wm = (WindowManager) mContext
            .getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width=size.x;
    int height= size.y;

    Rect dest = new Rect(0, 0, width, height);
    Paint paint = new Paint();
    paint.setFilterBitmap(true);
    canvas.drawBitmap(bm, null, dest, paint); //bm is your bitmap

你能解释一下为什么这段代码没有起作用吗? - Giulio Caccin
因为位图没有根据设备的屏幕大小进行绘制。首先,我们必须获取设备的资源来绘制位图,例如宽度和高度。 如果我的答案有帮助,请点赞。 - Sheeraz Ahmed
我的回答意思是 ^_^ - Giulio Caccin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接