You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用图片填充Android Canvas中的Rect?

用图片填充Canvas矩形的解决方案

当然可以实现用图片填充矩形的效果!在Android中,我们可以借助BitmapShader来完成这个需求——它能将图片转化为画笔的填充纹理,让你绘制的矩形被指定图片填满。下面是具体的实现步骤和修改后的代码:

核心思路

  1. 加载图片为Bitmap:先把你想要用来填充的图片转换成Bitmap对象(比如从资源文件、本地文件等渠道加载)
  2. 创建BitmapShader:用Bitmap生成Shader,并设置合适的平铺模式(控制图片超出矩形范围时的显示方式)
  3. 配置Paint:将Shader绑定到Paint上,这样Paint就具备了图片填充的能力
  4. 绘制矩形:使用配置好的Paint绘制矩形,就能得到图片填充的效果了

修改后的代码示例

MioCanvas类(核心修改部分)

public class MioCanvas extends View {
    Paint paint;
    Bitmap fillBitmap;

    public MioCanvas(Context context) {
        super(context);
        paint = new Paint();
        // 从应用资源中加载图片,替换成你自己的图片资源ID(比如R.drawable.my_fill_image)
        fillBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.your_image);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (fillBitmap == null) return;

        // 创建BitmapShader,设置平铺模式
        // 这里使用CLAMP模式:超出矩形范围的部分会拉伸图片边缘像素填充
        BitmapShader shader = new BitmapShader(fillBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        paint.setShader(shader);

        // 绘制矩形(注意你之前的y坐标1999999超出了屏幕范围,这里调整为0以便看到效果)
        canvas.drawRect(0, 0, canvas.getWidth() / 2, canvas.getHeight() / 2, paint);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        // 回收Bitmap,避免内存泄漏
        if (fillBitmap != null && !fillBitmap.isRecycled()) {
            fillBitmap.recycle();
        }
    }
}

关于平铺模式的说明

你可以根据需求选择不同的Shader.TileMode:

  • CLAMP:当图片尺寸小于矩形时,超出部分会拉伸图片的边缘像素来填充
  • REPEAT:重复平铺图片,直到填满整个矩形
  • MIRROR:以镜像翻转的方式重复平铺图片

MainActivity代码(无需修改)

你的MainActivity代码逻辑是正确的,可以保持原样:

public class MainActivity extends AppCompatActivity {
    MioCanvas mioCanvas;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mioCanvas = new MioCanvas(this);
        mioCanvas.setBackgroundColor(Color.GREEN);
        setContentView(mioCanvas);
    }
}

内容的提问来源于stack exchange,提问作者Francesco Comuzzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:51:39