【Android】图片切角,切指定的边。
Google了好久,发现能找到的代码都是重复的,而且代码垃圾很多。于是按着那段代码的解决方式,自己写了一个实现指定切某一边的工具类。
直接可用的代码:
- package com.lurencun.androidsysteminfomation;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.PorterDuffXfermode;
- import android.graphics.Rect;
- import android.graphics.RectF;
- import android.graphics.Bitmap.Config;
- import android.graphics.PorterDuff.Mode;
- /**
- * @author : 桥下一粒砂
- * @email : chenyoca@gmail.com
- * @date : 2012-11-8
- * @desc :
- */
- public class BitmapFillet {
- public static final int ALL = 347120;
- public static final int TOP = 547120;
- public static final int LEFT = 647120;
- public static final int RIGHT = 747120;
- public static final int BOTTOM = 847120;
- /**
- *
- * 指定图片的切边,对图片进行圆角处理
- * @param type 具体参见:{@link BitmapFillet.ALL} , {@link BitmapFillet.TOP} ,
- * {@link BitmapFillet.LEFT} , {@link BitmapFillet.RIGHT} , {@link BitmapFillet.BOTTOM}
- * @param bitmap 需要被切圆角的图片
- * @param roundPx 要切的像素大小
- * @return
- *
- */
- public static Bitmap fillet(int type,Bitmap bitmap,int roundPx) {
- try {
- // 其原理就是:先建立一个与图片大小相同的透明的Bitmap画板
- // 然后在画板上画出一个想要的形状的区域。
- // 最后把源图片帖上。
- final int width = bitmap.getWidth();
- final int height = bitmap.getHeight();
- Bitmap paintingBoard = Bitmap.createBitmap(width,height, Config.ARGB_8888);
- Canvas canvas = new Canvas(paintingBoard);
- canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
- final Paint paint = new Paint();
- paint.setAntiAlias(true);
- paint.setColor(Color.BLACK);
- if( TOP == type ){
- clipTop(canvas,paint,roundPx,width,height);
- }else if( LEFT == type ){
- clipLeft(canvas,paint,roundPx,width,height);
- }else if( RIGHT == type ){
- clipRight(canvas,paint,roundPx,width,height);
- }else if( BOTTOM == type ){
- clipBottom(canvas,paint,roundPx,width,height);
- }else{
- clipAll(canvas,paint,roundPx,width,height);
- }
- paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
- //帖子图
- final Rect src = new Rect(0, 0, width, height);
- final Rect dst = src;
- canvas.drawBitmap(bitmap, src, dst, paint);
- return paintingBoard;
- } catch (Exception exp) {
- return bitmap;
- }
- }
- private static void clipLeft(final Canvas canvas,final Paint paint,int offset,int width,int height){
- final Rect block = new Rect(offset,0,width,height);
- canvas.drawRect(block, paint);
- final RectF rectF = new RectF(0, 0, offset * 2 , height);
- canvas.drawRoundRect(rectF, offset, offset, paint);
- }
- private static void clipRight(final Canvas canvas,final Paint paint,int offset,int width,int height){
- final Rect block = new Rect(0, 0, width-offset, height);
- canvas.drawRect(block, paint);
- final RectF rectF = new RectF(width - offset * 2, 0, width , height);
- canvas.drawRoundRect(rectF, offset, offset, paint);
- }
- private static void clipTop(final Canvas canvas,final Paint paint,int offset,int width,int height){
- final Rect block = new Rect(0, offset, width, height);
- canvas.drawRect(block, paint);
- final RectF rectF = new RectF(0, 0, width , offset * 2);
- canvas.drawRoundRect(rectF, offset, offset, paint);
- }
- private static void clipBottom(final Canvas canvas,final Paint paint,int offset,int width,int height){
- final Rect block = new Rect(0, 0, width, height - offset);
- canvas.drawRect(block, paint);
- final RectF rectF = new RectF(0, height - offset * 2 , width , height);
- canvas.drawRoundRect(rectF, offset, offset, paint);
- }
- private static void clipAll(final Canvas canvas,final Paint paint,int offset,int width,int height){
- final RectF rectF = new RectF(0, 0, width , height);
- canvas.drawRoundRect(rectF, offset, offset, paint);
- }
- }
【Android】图片切角,切指定的边。的更多相关文章
- Android屏幕适配与切图_汇总
首先和最后,还是先看好官方文档:http://developer.android.com/guide/practices/screens_support.html 对应的翻译blog有牛人做了:And ...
- Css-深入学习之弧形切角矩形
本文是作者从别的网站和文章学习了解的知识,简单做了个笔记,想要学习更多的可以参考这里:[css进阶]伪元素的妙用--单标签之美,奇思妙想 (弧形切角矩形) 代码: width: 180px; heig ...
- Css--深入学习之切角
本文是作者从别的网站和文章学习了解的知识,简单做了个笔记,想要学习更多的可以参考这里:[css进阶]伪元素的妙用--单标签之美,奇思妙想 带切角的矩形: 该图来源于(奇思妙想) Css代码: .not ...
- 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移
解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...
- css实现切角效果
1. 一个切角 思路:如果我们要得到有一个切角的元素,我们只需要使用一个径向渐变就可以达到这个目标,这个渐变需要把一个透明色标放在切角处,然后再相同的位置设置另一个色标,并且把它的颜色设置成我们想要的 ...
- CSS奇思妙想图形(心形、气泡三角形、切角、梯形、饼图等)
今天看到一篇不错文章,在原来CSS3图形创建基础上扩展了很多. 这里记录总结下 心形 原理:利用 圆形 和 正方形实现 HTML: <div class="heartShaped&qu ...
- DDGScreenShot--iOS 图片裁剪,切圆角,加边框,你还用cornerRadius,还有更高级的用法
写在前面 我们肯定做过这样的需求,给一个图片切圆角, 当然我们大多采用简单粗暴的方法 myIcon.layer.cornerRadius = 16.5 myIcon.layer.masksToBoun ...
- css 折角效果/切角效果
首先我们先创建一个图案为100像素的斜面切角的图案 html <div class="one">12345</div> css .one{ width: 1 ...
- Android图片加载框架最全解析(八),带你全面了解Glide 4的用法
本篇将是我们这个Glide系列的最后一篇文章. 其实在写这个系列第一篇文章的时候,Glide就推出4.0.0的RC版了.那个时候因为我一直研究的都是Glide 3.7.0版本,再加上RC版本还不太稳定 ...
随机推荐
- 使用windbg抓取崩溃文件和分析的过程
在软件编程中,崩溃的场景比较常见的.且说微软技术再牛X,也是会出现崩溃的场景.网上有一段Win98当着比尔盖茨蓝屏的视频非常有意思. (转载请指明出于breaksoftware的csdn博客) ...
- 在TQ2440开发板上ping 127.0.0.1不通
问题:在TQ2440上ping 127.0.0.1,提示错误 ping: sendto: Network is unreachable 解决方法:ifconfig lo 127.0.0.1 up ...
- Android开之在非UI线程中更新UI
当在非UI线程中更新UI(程序界面)时会出现例如以下图所看到的的异常: 那怎样才干在非UI线程中更细UI呢? 方法有非常多种.在这里主要介绍三种: 第一种:调用主线程mHandler的post(Run ...
- Android学习笔记八:用Broadcast Receiver跨进程(跨app)通信
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7515194.html 在前面介绍四大组件的时候提到了可以对外部事件进行过滤的Broadcast Receive ...
- Java基础知识三点
1:对象的4种引用:强.软.弱.虚 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回 ...
- 全向轮运动学与V-rep中全向移动机器人仿真
Wheeled mobile robots may be classified in two major categories, omnidirectional and nonholonomic. O ...
- centos6.5官方dvd做本地yum
问题描述: 一切都搞定了,就是yum makecache 出现文件404,再目录看了也不对没后缀...(这不扯淡吗,rhel的dvd是可以直接使用的,难道企业版与社区版的区别??) 日志记录 [roo ...
- Ubuntu16.04下的stm32环境配置
安装stlink 必须安装libusb-1.0-0-dev, 其他安装不起作用 -dev git clone https://github.com/texane/stlink.git cd stlin ...
- Ubuntu16.04 Arduino UNO R3开发板
使用的是国内改过的版本, usb芯片换成了ch341, 晶振不是原版的16MHz而是12MHz, 杜邦线孔布局和原版一致. 设备连接 在Ubuntu16.04下不需要驱动, 能直接认出ch341设备 ...
- 在 Laravel 5.1 中使用 Pjax
在 Laravel 5.* 的版本中,使用 Pjax 实现无刷新效果,以及酷炫的进度条 项目地址:https://github.com/yccphp/pjax-for-laravel-5 求 star ...