【Android】图片切角,切指定的边。

  • 博客分类:
  • Android
  • Java
android

公司的项目,UI和应用都是我自己做的。前几天设计了一个UI,出现了半边圆角的情况,如下图片所示。图片都来自服务器,肯定不能要求返回的图片按这个格式,必须在应用端对图片进行切角。

Google了好久,发现能找到的代码都是重复的,而且代码垃圾很多。于是按着那段代码的解决方式,自己写了一个实现指定切某一边的工具类。

直接可用的代码:

Java代码  
  1. package com.lurencun.androidsysteminfomation;
  2. import android.graphics.Bitmap;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.Paint;
  6. import android.graphics.PorterDuffXfermode;
  7. import android.graphics.Rect;
  8. import android.graphics.RectF;
  9. import android.graphics.Bitmap.Config;
  10. import android.graphics.PorterDuff.Mode;
  11. /**
  12. * @author : 桥下一粒砂
  13. * @email  : chenyoca@gmail.com
  14. * @date   : 2012-11-8
  15. * @desc   :
  16. */
  17. public class BitmapFillet {
  18. public static final int ALL = 347120;
  19. public static final int TOP = 547120;
  20. public static final int LEFT = 647120;
  21. public static final int RIGHT = 747120;
  22. public static final int BOTTOM = 847120;
  23. /**
  24. *
  25. * 指定图片的切边,对图片进行圆角处理
  26. * @param type 具体参见:{@link BitmapFillet.ALL} , {@link BitmapFillet.TOP} ,
  27. *              {@link BitmapFillet.LEFT} , {@link BitmapFillet.RIGHT} , {@link BitmapFillet.BOTTOM}
  28. * @param bitmap 需要被切圆角的图片
  29. * @param roundPx 要切的像素大小
  30. * @return
  31. *
  32. */
  33. public static Bitmap fillet(int type,Bitmap bitmap,int roundPx) {
  34. try {
  35. // 其原理就是:先建立一个与图片大小相同的透明的Bitmap画板
  36. // 然后在画板上画出一个想要的形状的区域。
  37. // 最后把源图片帖上。
  38. final int width = bitmap.getWidth();
  39. final int height = bitmap.getHeight();
  40. Bitmap paintingBoard = Bitmap.createBitmap(width,height, Config.ARGB_8888);
  41. Canvas canvas = new Canvas(paintingBoard);
  42. canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
  43. final Paint paint = new Paint();
  44. paint.setAntiAlias(true);
  45. paint.setColor(Color.BLACK);
  46. if( TOP == type ){
  47. clipTop(canvas,paint,roundPx,width,height);
  48. }else if( LEFT == type ){
  49. clipLeft(canvas,paint,roundPx,width,height);
  50. }else if( RIGHT == type ){
  51. clipRight(canvas,paint,roundPx,width,height);
  52. }else if( BOTTOM == type ){
  53. clipBottom(canvas,paint,roundPx,width,height);
  54. }else{
  55. clipAll(canvas,paint,roundPx,width,height);
  56. }
  57. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  58. //帖子图
  59. final Rect src = new Rect(0, 0, width, height);
  60. final Rect dst = src;
  61. canvas.drawBitmap(bitmap, src, dst, paint);
  62. return paintingBoard;
  63. } catch (Exception exp) {
  64. return bitmap;
  65. }
  66. }
  67. private static void clipLeft(final Canvas canvas,final Paint paint,int offset,int width,int height){
  68. final Rect block = new Rect(offset,0,width,height);
  69. canvas.drawRect(block, paint);
  70. final RectF rectF = new RectF(0, 0, offset * 2 , height);
  71. canvas.drawRoundRect(rectF, offset, offset, paint);
  72. }
  73. private static void clipRight(final Canvas canvas,final Paint paint,int offset,int width,int height){
  74. final Rect block = new Rect(0, 0, width-offset, height);
  75. canvas.drawRect(block, paint);
  76. final RectF rectF = new RectF(width - offset * 2, 0, width , height);
  77. canvas.drawRoundRect(rectF, offset, offset, paint);
  78. }
  79. private static void clipTop(final Canvas canvas,final Paint paint,int offset,int width,int height){
  80. final Rect block = new Rect(0, offset, width, height);
  81. canvas.drawRect(block, paint);
  82. final RectF rectF = new RectF(0, 0, width , offset * 2);
  83. canvas.drawRoundRect(rectF, offset, offset, paint);
  84. }
  85. private static void clipBottom(final Canvas canvas,final Paint paint,int offset,int width,int height){
  86. final Rect block = new Rect(0, 0, width, height - offset);
  87. canvas.drawRect(block, paint);
  88. final RectF rectF = new RectF(0, height - offset * 2 , width , height);
  89. canvas.drawRoundRect(rectF, offset, offset, paint);
  90. }
  91. private static void clipAll(final Canvas canvas,final Paint paint,int offset,int width,int height){
  92. final RectF rectF = new RectF(0, 0, width , height);
  93. canvas.drawRoundRect(rectF, offset, offset, paint);
  94. }
  95. }

【Android】图片切角,切指定的边。相关推荐

  1. css3切角文本框_[CSS揭秘]切角效果

    将角切掉也是一种流行的设计风格 传统解决方案可能是使用三角形或者其他形状的图片来盖住边角从而模拟切角效果 有了CSS3,我们完全可以使用新技术来实现 第一种方案: CSS渐变 需求一: 一个矩形需要切 ...

  2. linear-gradient 实现切角效果

    一.前言 linear-gradient() :函数用于创建一个表示两种或多种颜色线性渐变的图片.即实现线性渐变! 二.基础用法 默认渐变方向是从上到下渐变,这种情况不需要申明渐变方向! /* 1. ...

  3. html四边形的的框怎么编写,html知识点之利用css四边形切角并且加上边框

    html知识点之利用css四边形切角并且加上边框 html知识点之利用css四边形切角并且加上边框 前言 这几个月做了很多前端工作,其中一个需求还是蛮头疼,UI给的图上面的四边形是一个带斜边的,直接用 ...

  4. css实现平角切角和弧形切角效果

    在web设计中,有时候会碰到一些切角的样式需求,实现方法有很多种,用图片也好,结点叠加覆盖也好,都可以实现切角的样式,这里笔者直接用css来实现切角的样式. 切单一角: background: #58 ...

  5. CSS 实现切角效果

    最近项目中看到这样的一个切角效果,如下所示 就是一个正常的矩形,然后被"切"了一块,而且是沿着右上角切的.那么,这种布局如何实现呢? 一.自适应方式 这种布局一般有两种自适应方式, ...

  6. 基于CSS mask和clip-path实现切角的技巧

    本文翻译自 Tricks to Cut Corners Using CSS Mask and Clip-Path Properties,略有删改 原作者:Temani Afif 我们最近使用CSS m ...

  7. css3切角文本框_CSS3如何实现4个切角

    谢邀..既然如此,就说的详细点吧.. 首先回答问题2: 在这个例子里,要知道 background-size:50% 50%; 意思是你设置的背景长和宽各为元素的一半.也就是为如果你的背景是张图片,那 ...

  8. CSS背景切角的实现研究

    问题 我们在写前端页面过程总,会碰到这种情况,UCD给的一个带切角的背景给我们当一个模块的背景,然后这个模块的宽高又都不是固定的,这种情况下,如果改变模块的大小,切角的角度就会发生变化,如下图所示(原 ...

  9. 3dmax中的切角chamfer能用出什么花来吗?

    切角功能在2021之前基本上很难成功的切出一个圆角来,即使勉强切出来了,在做下一步操作的时候都是会出现破边或者点错位的情况,这里我们用2021来作实验切角发现能够完美实现了. 一.切点 1.切点为四边 ...

最新文章

  1. Spring MVC Servlet XML文件配置
  2. 如何将zipoutputstream返回_excel:vlookup如何区间查找?如何使用通配符?如何多条件查找?...
  3. ITK:将ITK灰度图像转换为CV :: Mat
  4. php获取目录中的所有文件名
  5. c语言运行k值不变,C语言期末复习(改完).doc
  6. [NHibernate]一对多关系(级联删除,级联添加)
  7. windows ce操作系统能用哪个导航_微软的windows和苹果的mac操作系统,在技术难度上哪个更高...
  8. sumo添加车辆_SUMO 交通控制接口 —— TraCI
  9. pr剪辑打开多个项目_写给后期剪辑新手的PR软件基础操作全流程指南
  10. 仪电电子“结盟”复旦大数据学院
  11. android熄屏微信收到原理,求助,如何才能在息屏状态下显示收到的微信消息内容?...
  12. fcpx字幕功能详细使用教程
  13. MarkdownPad中使用中文
  14. 戴尔 DELL 游戏笔记本电脑 - Windows 10 关闭或开启功能键 (Fn key)
  15. 递归牛顿欧拉(正/逆)动力学仿真
  16. 番茄工作法总结-第二章:背景
  17. 7.深入浅出:互补输出级——参考《模拟电子技术基础》清华大学华成英主讲
  18. PKI体系简易JAVA实现(一):时间戳服务器TSA
  19. 以IP地址的形式访问网站
  20. 学习黑盒优化算法CMA和RandomSearch,借助阿里达摩院MindOpt的RABBO榜单【系列2/4】

热门文章

  1. 邮件集成java mail + 读取邮件模板
  2. 幼儿园管理系统测试报告
  3. 4 数据分析 统计学-描述统计分析
  4. 国内最专业的化妆品网站--宝迪网
  5. 邮箱验证 验证邮箱真实性
  6. 无限互联iOS视频教程及课件PPT源码
  7. 从0开始制作小游戏(一)
  8. 三星s6开机无显示无服务器,三星Galaxy S6手机不能开机怎么办?三星Galaxy S6手机不能开机解决办法...
  9. 留住员工的10个方法,老板与管理者必读
  10. 512_盟德插件googleplayservice