Android中绘制圆角矩形图片及任意形状图片
转自http://blog.csdn.net/silangquan/article/details/8056583
圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为它避开了直角的生硬,带来更好的用户体验,下面是几个设计的例子:
下面在Android中实现将普通的矩形图片绘制成圆角矩形。首先看最终效果:
- package com.example.phototest;
- import android.os.Bundle;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.PorterDuffXfermode;
- import android.graphics.PorterDuff;
- import android.graphics.RectF;
- import android.graphics.drawable.BitmapDrawable;
- import android.graphics.drawable.Drawable;
- import android.view.Menu;
- import android.widget.ImageView;
- public class MainActivity extends Activity {
- private ImageView myImageView;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- myImageView=(ImageView)findViewById(R.id.imageView1);
- Bitmap photo = BitmapFactory.decodeResource(getResources(), R.drawable.photo1);
- myImageView.setImageBitmap(createFramedPhoto(500,400,photo,20));
- //myImageView.setImageBitmap(createStarPhoto(500,400,photo));
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- private Bitmap createFramedPhoto(int x, int y, Bitmap image, float outerRadiusRat) {
- //根据源文件新建一个darwable对象
- Drawable imageDrawable = new BitmapDrawable(image);
- // 新建一个新的输出图片
- Bitmap output = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(output);
- // 新建一个矩形
- RectF outerRect = new RectF(0, 0, x, y);
- // 产生一个红色的圆角矩形
- Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
- paint.setColor(Color.RED);
- canvas.drawRoundRect(outerRect, outerRadiusRat, outerRadiusRat, paint);
- // 将源图片绘制到这个圆角矩形上
- //详解见http://lipeng88213.iteye.com/blog/1189452
- paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
- imageDrawable.setBounds(0, 0, x, y);
- canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
- imageDrawable.draw(canvas);
- canvas.restore();
- return output;
- }
- }
实现原理:通过在一个Canvas中绘制一个最终的输出形状,然后通过类似于遮罩的方式将图形显示出来,最终的图片形状就是先前绘制的图形的形状。具体起作用的函数是这个:
- paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
代码:
- private Bitmap createStarPhoto(int x, int y, Bitmap image)
- {
- //根据源文件新建一个darwable对象
- Drawable imageDrawable = new BitmapDrawable(image);
- // 新建一个新的输出图片
- Bitmap output = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(output);
- // 新建一个矩形
- RectF outerRect = new RectF(0, 0, x, y);
- Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
- paint.setColor(Color.RED);
- Path path = new Path();
- //绘制三角形
- //path.moveTo(0, 0);
- //path.lineTo(320, 250);
- //path.lineTo(400, 0);
- //绘制正无边形
- long tmpX,tmpY;
- path.moveTo(200, 200);// 此点为多边形的起点
- for(int i=0;i<=5;i++)
- {
- tmpX =(long)(200+200*Math.sin((i*72+36)*2*Math.PI/360));
- tmpY =(long)(200+200*Math.cos((i*72+36)*2*Math.PI/360));
- path.lineTo(tmpX, tmpY);
- }
- path.close(); // 使这些点构成封闭的多边形
- canvas.drawPath(path, paint);
- //canvas.drawCircle(100, 100, 100, paint);
- // 将源图片绘制到这个圆角矩形上
- // 产生一个红色的圆角矩形
- paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
- imageDrawable.setBounds(0, 0, x, y);
- canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
- imageDrawable.draw(canvas);
- canvas.restore();
- return output;
- }
Android中绘制圆角矩形图片及任意形状图片相关推荐
- 在Android中绘制圆角矩形图片
圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形. 先来看一下普通矩形图片的显示,代码很简单,从r ...
- 在Canvas中绘制圆角矩形
问题的提出 要在Canvas中绘制一个矩形,使用strokeRect或fillRect函数即可. var canvas = document.getElementById("canvas&q ...
- android paint 圆角 绘制_[BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
- Delphi中绘制圆角矩形的窗体
制作圆角矩形的窗体: 01.procedure TPortForm.FormCreate(Sender: Tobject); 02.var hr :thandle; 03.begin 04.hr:=c ...
- HTML设置单边圆角,如何在html中做圆角矩形和 只有右边的分隔线
其实是对(理论上是对所有的)html元素: 而实际 常用的是 div块, 链接a 等运用圆角矩形的样式 这个圆角是通过元素: div, a的 css 样式来实现的: 样式: border-radius ...
- android中图片圆角,Android中实现圆角图片的几种方法
Android中实现圆角图片有多种姿势,不知你解锁了几种? 方法一:setXfermode法 此种方式就是再new一个相同尺寸的bitmap,然后使用paint.setXfermode(new Por ...
- android绘制圆角矩形
android中可以绘制圆角矩形. 1.利用画布cavas绘制 如果提供了一个方法可以在画布上绘制圆角矩形: 函数名称:public void drawRoundRect (RectF rect, f ...
- 微信小程序使用canvas绘制圆角矩形在Android:变形、锯齿
这两天用小程序实现分享生成海报,那我的手机测的一直没问题,结果后来用同事的小米测发现:画的图形缺个角,锯齿形的,根据小程序社区回复:使用ctx.arc + ctx.lineTo就能避免Android错 ...
- html中圆角矩形怎么写,如何在HTML画布上绘制圆角矩形?
要在HTML中绘制矩形,请使用canvas元素.对于画布,请使用该rect()方法绘制矩形.但是,对于创建圆角矩形,使用该rect()方法将不起作用.我们将使用lineTo()andquadratic ...
最新文章
- 图文并茂!60页PPT《快速入门python数据分析路线》(附链接)
- 【原创】iframe与父页面之间,变量、方法互相调用
- [JS]js中判断变量类型函数typeof的用法汇总[转]
- 图文+动画讲解排序算法总结!!
- 给刚入行的存储工程师10+1点建议
- 【Pytorch】interpolate==>上下采样函数
- Oracle DataGuard数据备份方案详解
- MyBatis的CRUD操作
- 异常处理和代码复用在python自动化运维中的使用(eNSP模拟器)
- 【语音编辑】基于matlab语音编辑【含Matlab源码 539期】
- 你有必要不沾计算机一段时间英语,2014新人教版八年级英语下册第一单元必背词组及句子...
- 将虚幻引擎5与Perforce Helix Core集成使用吧!
- GNSS/INS组合导航(五):惯性导航参数建模
- 利用“3 of 9 barcode”字体实现一维条形码(只支持英文等ASCII字符)
- 微生物组-宏基因组分析(线上/线下同时开课,2021.11)
- 抖音企业号,抖音搜索框SEO优化系统搭建。
- Failed to open \EFI\BOOT\mmx64.efi问题解决
- 北航计算机是啥水平,清华眼中的北航是什么水平?附北航2020年全国录取分数线...
- 机器学习准备数据时如何避免数据泄漏
- Highcharts Gantt JS 现代 Web 开发的甘特图
热门文章
- Windows下JPBC库的使用
- Codeforces Round #521 (Div. 3) B. Disturbed People
- 清华毕业程序员国企干了14年,去应聘小公司,看到工资后愣了
- C++ Tetris俄罗斯方块
- 重心法选址 matlab程序,Excel重心法选址计算题的详细步骤
- Ubuntu下搭建SVN与Apache权限控制
- Unity3d在PC上竖屏运行
- win10 无法识别x64dbg 插件
- c#控制台模拟dos_超好用的C#控制台应用模板
- 关于使用winfrom程序调用命令控制台