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);
    }
}

具体效果图如下:


目录
相关文章
|
3月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
72 20
Android经典面试题之图片Bitmap怎么做优化
|
3月前
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
308 3
|
4月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
5月前
|
前端开发 API Android开发
Android自定义View之Canvas一文搞定
这篇文章介绍了Android自定义View中如何使用Canvas和Paint来绘制图形。Canvas可理解为画布,用于绘制各种形状如文字、点、线、矩形、圆角矩形、圆和弧。常见API包括`drawText()`、`drawPoint()`、`drawLine()`、`drawRect()`等。文章还提到了Canvas的保存、恢复、平移和旋转方法,通过绘制钟表盘的例子展示了如何实际应用。总结关键点:Canvas与Paint结合用于图像绘制,掌握Canvas的基本绘图函数及坐标变换操作是自定义View的关键。
88 0
Android自定义View之Canvas一文搞定
|
6月前
|
存储 Java Android开发
Android上在两个Activity之间传递Bitmap对象
Android上在两个Activity之间传递Bitmap对象
46 2
|
6月前
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
54 2
|
6月前
|
XML 前端开发 API
Android中实现Bitmap在自定义View中的放大与拖动
Android中实现Bitmap在自定义View中的放大与拖动
159 1
|
7月前
|
自然语言处理 算法 搜索推荐
Android文字匹配度算法
【5月更文挑战第15天】
|
7月前
|
JSON 自然语言处理 Java
Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
366 0
|
7月前
|
算法 前端开发 Android开发
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题