Android 中使用Canvas绘制文字和矩形,将结果呈现在Bitmap上

简介: Android 中使用Canvas绘制文字和矩形,将结果呈现在Bitmap上

一、activity_view1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".View1Activity">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

二、View1Activity代码如下,具体注释已经在代码中给出

public class View1Activity extends AppCompatActivity {
    private ImageView iv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view1);
        iv = findViewById(R.id.iv);
        //创建了一个 400*400 的 ARGB_8888 类型的空白位图对象
        Bitmap bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);
        //创建画布对象
        Canvas canvas = new Canvas(bitmap);
        //绘制文字
        Paint paint = new Paint();
        // 防锯齿
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
        //设置文本的对齐方式,可选值有 Paint.Align.LEFT、Paint.Align.CENTER、Paint.Align.RIGHT
        //等。
        paint.setTextAlign(Paint.Align.LEFT);
        int sp = 14;
        //设置文本大小,单位是 px,这个和我们平时使用的字体单位 sp 不同,所以最好进行转
        //换。
        paint.setTextSize(sp);
        //设置文本的倾斜程度,skewx 取值于 0~1 之间,正负表示倾斜的方向 正表示向左倾斜。
        paint.setTextSkewX(0.5f);
        //给文本添加下载线,underline 为 true 表示添加
        paint.setUnderlineText(true);
        //设置文本的粗体样式,bold 为 true 表示粗体。
        paint.setFakeBoldText(true);
        canvas.drawText("测试代码,使用画笔绘制文字!", 10, 100, paint);
        //绘制图形
        //设置绘制的图形是空心样式还是实心样式,默认为实心样式。
        //,FILL 表示实心样式,对于闭合图形来说,会用指定的颜色进行填充;STROKE 表
        //示空心样式,绘制时只有线条而无填充效果;FILL_AND_STROKE 表示同时使用实心样
        //式和空心样式。
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.parseColor("#FF0000"));
        //设置线条的宽度,注意是 float 类型,在 Android 中最细的线条不是 1,可以比 1 更小
        //更细。
        paint.setStrokeWidth(20);
        //当绘图样式为 STROKE 时,该方法用于指定线条连接处的拐角样式,能使绘制的图形
        //更加平滑。
        paint.setStrokeJoin(Paint.Join.ROUND);
        //绘制一个矩形
        canvas.drawRect(new Rect(10, 200, 350, 350), paint);
        iv.setImageBitmap(bitmap);
    }
}

具体效果图如下:


目录
相关文章
|
1月前
|
Android开发
[Android jni] Bitmap与Mat对象的相互转换
[Android jni] Bitmap与Mat对象的相互转换
53 0
|
3月前
|
存储 缓存 编解码
Android 性能优化: 解释Bitmap的优化策略。
Android 性能优化: 解释Bitmap的优化策略。
42 1
|
4月前
|
XML API Android开发
Android 自定义View 之 计时文字
Android 自定义View 之 计时文字
|
4月前
|
XML Android开发 数据格式
[Android]Bitmap Drawable
[Android]Bitmap Drawable
29 0
|
4月前
|
XML 算法 Java
Android App开发之位图加工Bitmap中转换位图的像素色彩、裁剪内部区域、利用矩阵变换位图的讲解及实战(附源码和演示)
Android App开发之位图加工Bitmap中转换位图的像素色彩、裁剪内部区域、利用矩阵变换位图的讲解及实战(附源码和演示)
29 0
|
8月前
|
Android开发 开发者
Android自定义View之定点写文字
Android自定义View之定点写文字
|
10月前
|
XML JavaScript Java
Android实现加载富文本以及SpannableString、SpannableStringBuilder实现部分文字可以点击,更换颜色
Android实现加载富文本以及SpannableString、SpannableStringBuilder实现部分文字可以点击,更换颜色
|
缓存 Java Android开发
Android C++系列:JNI操作Bitmap
在 Android 通过 JNI 去调用 Bitmap,通过 CMake 去编 so 动态链接库的话,需要添加 jnigraphics 图像库。
348 0
|
Android开发 Kotlin 容器
Android彩色文字的超链接实现的封装
最近设计界面的时候碰到这样一个问题,我们经常可以看到这样的一个界面,告知用户的隐私条款和用户协议这样的这个底部彩色文字,而且这些彩色文字都是直接指向相应的链接
100 0
Android彩色文字的超链接实现的封装
|
算法 Android开发
文字绘制 | Android 单行,多行文字绘制
文字绘制 | Android 单行,多行文字绘制
文字绘制 | Android 单行,多行文字绘制