【原创】绘制圆形的Bitmap

本文介绍了一种在Android中将Bitmap转换为圆形的方法。通过获取原图的宽高,计算圆心和基准半径,创建正方形空白Bitmap,再进行位移和叠加绘制,实现了从原图到圆形Bitmap的转换。提供了一个ImageView的Override实现,方便直接使用。

最近发现很多应用都用圆形的Bitmap,心血来潮,lz也写了一个...技术不佳,写的很烂,请各位海涵。(源码在最底下提供下载)


原图:

效果图:


这里简单的说一下实现原理,lamer可以自然绕过...

实现原理:

          1.得到原图的宽高,计算出圆心,取图片的短边为基准半径。

          2.创建空白Bitmap,大小为基准半径的正方形。

          3.位移原图,使其中心点和创建的空白图中心点重合。

          4.利用Android的Paint绘制叠加图,只绘制重叠部分

          5.效果完成。


在这里我Override了一个ImageView,方便大家直接使用,当然也可以不使用这个ImageVIew,而使用其中静态的方法,效果是一样的。


直接上代码:

/*
 * Copyright (C) 2013 'Chaos'.Personal
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND
### 清除已绘制Bitmap 的方法 在使用 `switch` 语句清除已绘制的 `Bitmap` 时,可以通过设置 `Bitmap` 对象为 `null` 并调用垃圾回收机制来释放其占用的内存资源。以下是具体实现方式: #### 设置 Bitmap 为 null 当不再需要某个 `Bitmap` 对象时,将其设为 `null` 是一种常见的做法。这会告诉 Java 虚拟机 (JVM),该对象已经可以被回收[^1]。 ```java private Bitmap bitmap; public void clearBitmap() { if (bitmap != null) { bitmap.recycle(); bitmap = null; } } ``` 在此代码片段中,`recycle()` 方法用于手动释放 `Bitmap` 占用的底层资源,而将 `bitmap` 设为 `null` 则允许 JVM 将其标记为可回收的对象。 #### 使用 switch 语句控制清理逻辑 通过结合 `switch` 语句,可以根据不同的条件执行相应的清理操作。例如: ```java public void handleAction(int actionType) { switch (actionType) { case 0: // 执行其他操作 break; case 1: clearBitmap(); System.gc(); // 建议显式请求垃圾回收 break; default: break; } } private void clearBitmap() { if (bitmap != null && !bitmap.isRecycled()) { bitmap.recycle(); bitmap = null; } } ``` 此代码展示了如何利用 `switch` 来触发 `clearBitmap()` 函数,并进一步建议调用 `System.gc()` 请求 JVM 进行垃圾回收。 #### 防止内存泄漏注意事项 需要注意的是,在 Android 开发过程中,如果某些组件(如 Context 或 Activity 实例)被长时间持有,则可能导致内存泄漏问题[^2]。因此,在设计涉及形处理的应用程序时,应特别注意避免不必要的长期引用。 另外,对于复杂场景下的绘需求,推荐采用双缓冲技术或其他优化策略以提高性能并降低闪屏现象的发生概率[^3]。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值