打赏

android 平铺图片 类似word里面平铺 像ios里面的平铺效果

需要自定义一个view  (新建class 继承View)

复制代码

package com.example.myapplication1.widget;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.util.AttributeSet;
import android.view.View;
import com.example.myapplication1.R;

/**
* @ClassName BitmapShaderView
* @Description TODO
* @Author ZhangXueTao
* @Date 2020/10/9 8:44
* @Version 1.0 模板 29
*/

public class BitmapShaderView extends View {

private Bitmap mBitmap = null;
private ShapeDrawable sDrawable = null;
private Shader mBitmapShader = null;

public BitmapShaderView(Context context) {
this(context, null);
}

public BitmapShaderView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public BitmapShaderView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}


private void init() {
mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.pm292pingguo);
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
Color.BLUE, Color.WHITE}, null);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
sDrawable = new ShapeDrawable(new OvalShape());
sDrawable.getPaint().setShader(mBitmapShader);
sDrawable.setBounds(0, 0, 1000, 500);
sDrawable.draw(canvas);

}
}
复制代码

 

1.其中在init()方法里面出现了Shader.TileMode.REPEAT  解释一下构造方法详解

BitmapShader(图像渲染)

BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
使用一张位图作为纹理来对某一区域进行填充,参数依次:

  • bitmap:用来作为填充的位图;
  • tileX:X轴方向上位图的衔接形式;
  • tileY:Y轴方向上位图的衔接形式;

而这个Shader.TileMode有三种:

  • CLAMP:就是如果渲染器超出原始边界范围,则会复制边缘颜色对超出范围的区域进行着色
  • REPEAT:则是平铺形式重复渲染
  • MIRROR:则是在横向和纵向上以镜像的方式重复渲染位图。

2.在onDraw()方法里面出现了sDrawable = new ShapeDrawable(new OvalShape());

  • 画圆形 OvalShape

  • 画半圆 ArcShape

  • 画矩形 RectShape

  • 画内外双层矩形,并且有圆角 RoundRectShape

  • 画任意形状 PathShape

 

posted @   YY2000  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示