android BitmapShader实现圆形imageview

待兔 等级 821 0 0
标签: https移动端

BitmapShader描述:
Shader used to draw a bitmap as a texture. The bitmap can be repeated or mirrored by setting the tiling mode.
用来将bitmap 绘制为纹理的着色器。通过设置平铺模式,位图可以重复或镜像
BitmapShader是Shader的子类
BitmapShader
ComposeShader
LinearGradient
RadialGradient
SweepGradient

其他之类逐一学习使用..

android   BitmapShader实现圆形imageview

test111.png

这是原图 我们要的效果是这样

android   BitmapShader实现圆形imageview

Screenshot_20170629113943.png

创建一个CircleImageView继承ImageView

主要重写
onDraw
onMeasure
这两个方法

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //取宽度或者高度的最小值
        int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
        mRadius = size / 2;
        setMeasuredDimension(size, size);
    } 

private float mScale; private int mRadius; //圆形图片的半径 BitmapShader mBitmapShader; Paint mBitmapPaint; @Override protected void onDraw(Canvas canvas) { //创建一个画笔 mBitmapPaint = new Paint(); //把Drawable转化为Bitmap Bitmap bitmap = getBitmapFromDrawable(getDrawable()); //设置一个BitmapShader //Shader.TileMode.CLAMP 当所画图形的尺寸大于Bitmap的尺寸的时候,会用Bitmap四边的颜色填充剩余空间 //REPEAT 重复平铺整个绘制的区域
//MIRROR 镜像平铺整个绘制的区 mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); //计算缩放比例 mScale = ((mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth())); //可以保证显示的时候图片内容照应Shader大小,否者图片显示偏移 Matrix matrix = new Matrix(); matrix.setScale(mScale, mScale); mBitmapShader.setLocalMatrix(matrix); //添加Shader mBitmapPaint.setShader(mBitmapShader); //画圆 canvas.drawCircle(mRadius, mRadius, mRadius, mBitmapPaint);

} 
 private Bitmap getBitmapFromDrawable(Drawable drawable) {
        if (drawable == null) {
            return null;
        }
        if (drawable instanceof BitmapDrawable) {
            return ((BitmapDrawable) drawable).getBitmap();
        }
        Bitmap bitmap;
        bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return bitmap;

    } 
```  
收藏
评论区

相关推荐

android BitmapShader实现圆形imageview
BitmapShader描述: Shader used to draw a bitmap as a texture. The bitmap can be repeated or mirrored by setting the tiling mode. 用来将bitmap 绘制为纹理的着色器。通过设置平铺模式,位图可以重复或镜像 BitmapSha
IOS切图---关于显示图片时图片会变糊!
[本人新手,在开发时,曾遇到图片变糊的问题(没达到设计师的要求的效果),这个一直纠结了好久,但最近测试发现,终于发现了问题源头了,像素是一个点一个点显示的(像素点),对于只兼容4S以后的app来说,图片的像素大小都是@2x,而设定imageView的长和宽时,是根据图片的长和宽除以2,此时若图片的长和宽不是偶数,图片就会变糊,原因是图片被拉长了一个像素点,比
java编程中使用二进制进行权限或状态控制
直接看代码以及注释吧。 @Test public void main() { // PC WEB端 int pc = 1 << 0;// ...0001=1 // Android端 int android = 1 <<
Android ScaleDrawable
顾名思义,Android ScaleDrawable实现一个drawable的缩放。写一个例子。 一个线性布局,垂直放几个ImageView,然后依次缩放若干个ScaleDrawable。 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="
Android 本地图片加载器
//利用NativeImageLoader类加载本地图片 Bitmap bitmap = NativeImageLoader.getInstance().loadNativeImage(path, mPoint, new NativeImageCallBack() { @Override pub
Android实现Windows 8磁贴(Tile)样式按钮
**《Android实现Windows 8磁贴(Tile)样式按钮》** 效果图如下: ![](https://static.oschina.net/uploads/img/201801/04144609_xwHg.jpg) 我在网上流传的代码基础上精简、整理出一个简单的类,我暂时把它命名为:Windows8TileImageView,即Windows
2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
1、引言 ======= 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了。 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活这条路给堵死了(详见:《[Android P正式版即将到来:后台应用保活、消息推送的真正噩梦](https://www.oschina
2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
1、引言 ======= 对于移动端IM应用和消息推送应用的开发者来说,Android后台保活这件事是再熟悉不过了。 自从Android P(即Android 8.0)出现以后,Android已经从系统层面将后台保活这条路给堵死了(详见:《[Android P正式版即将到来:后台应用保活、消息推送的真正噩梦](https://www.oschina
Android ImageView setImageBitmap 不显示图片
从sd卡里读出图片后有时调用setImageBitmap(bitmap)方法会显示不出图片,仔细考虑过后原来是加载的图片过大导致的,解决办法为: BitmapFactory.Options op = new BitmapFactory.Options(); op.inSampleSize = 2; //op.in
Android ImageView 的scaletype属性详细介绍
android:scaleType是控制图片如何 resized/moved来匹对ImageView的size,我们可以这样啦使用 1. <ImageView android:id="@+id/img\_weibo\_img" 2. android:layout\_width="fill\_parent" 3. and
Android中的图片视图的边框?
如何为`ImageView`设置边框并在Android中更改其颜色? * * * ### #1楼 这是我认识的一篇旧帖子,但我认为这可能会帮助那些人。 如果要模拟不与形状的“实心”颜色重叠的半透明边框,请在xml中使用此边框。 请注意,我根本不使用“stroke”标签,因为它似乎总是与实际绘制的形状重叠。 <?xml version="
Android开源项目分类汇总
第一部分 个性化控件(View) ---------------- 主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、 GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、 FlipView、Color
Android音乐播放器开发(6)—歌曲播放列表
1\. 说明 ------ 本文很早就开始写了,不过中间把电脑借给小伙伴了,后来就忘了这件事了… 内容已同步到[Gitee仓库](https://gitee.com/Sjcun/android-MusicPlayer) 以往的文章 * 服务端:[Android音乐播放器开发–服务端](https://www.oschina.net/action/
GifView
GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediaplay来显示这个问题的项目,其用法和 ImageView一样,支持gif图片 使用方法: 1-把GifView.jar加入你的项目。 2-在xml中配置GifView的基本属性,GifView继承自View类,和Button、ImageView一样是一个
Test
 publicclass TestActivity extends Activity {    privatefinalstatic String TAG = "IcsTestActivity";    privatefinalstatic String ALBUM_PATH            = Environment.getExternalS