开源项目:RoundedImageView

  RoundedImageView,顾名思义,就是“圆形的ImageView”。RoundedImageView是基于Android官方的RoundedBitmapDrawable对ImageView进行的扩展,支持显示圆形,圆角图片。与Github上的众多CircleImageView项目比较,RoundedImageView实现细节相对简单,操作方便。

  安装方法 

  在Android Studio中,以导入Module的方式添加RoundedImageView依赖(jCenter Remote Library Dependency等待更新...)。

  基本用法

  (1)显示圆形图片:

1 <org.warnier.zhang.widget.RoundedImageView
2     xmlns:android="http://schemas.android.com/apk/res/android"
3     xmlns:app="http://schemas.android.com/apk/res-auto"
4     android:layout_width="wrap_content"
5     android:layout_height="wrap_content"
6     android:scaleType="fitXY"
7     app:circular="true"
8     app:src="@drawable/logo" />

  (2)显示圆角图片:

1 <org.warnier.zhang.nongji.widget.RoundedImageView
2     xmlns:android="http://schemas.android.com/apk/res/android"
3     xmlns:app="http://schemas.android.com/apk/res-auto"
4     android:layout_width="wrap_content"
5     android:layout_height="wrap_content"
6     android:scaleType="fitXY"
7     app:cornerRadius="8dp"
8     app:src="@drawable/logo" />

  注意:“app:src”,而不是“android:src”,否则可能显示失败。

  注意:同时使用“app:circular”,“app:cornerRadius”属性,显示圆角图片。

  设计思想

  重写setImageResource(),setImageBitmap()方法,将读取的图片资源用RoundedBitmapDrawable包装成需要的圆形或圆角图片。

  源代码

 1 package org.warnier.zhang.widget;
 2
 3 import android.content.Context;
 4 import android.content.res.TypedArray;
 5 import android.graphics.Bitmap;
 6 import android.graphics.BitmapFactory;
 7 import android.graphics.drawable.Drawable;
 8 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
 9 import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
10 import android.util.AttributeSet;
11 import android.widget.ImageView;
12
13 import org.warnier.zhang.nongji.R;
14
15 public class RoundedImageView extends ImageView {
16     private int mCornerRadius = 0;
17     private boolean mCircular = false;
18     private int mResource = 0;
19
20     public RoundedImageView(Context context) {
21         this(context, null);
22     }
23
24     public RoundedImageView(Context context, AttributeSet attrs) {
25         this(context, attrs, 0);
26     }
27
28     public RoundedImageView(Context context, AttributeSet attrs, int defStyleAttr) {
29         super(context, attrs, defStyleAttr);
30         TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.RoundedImageView, 0, 0);
31         try {
32             mCornerRadius = typedArray.getDimensionPixelSize(R.styleable.RoundedImageView_cornerRadius, 0);
33             mCircular = typedArray.getBoolean(R.styleable.RoundedImageView_circular, false);
34             mResource = typedArray.getResourceId(R.styleable.RoundedImageView_src, 0);
35             if (mResource != 0) {
36                 setImageResource(mResource);
37             }
38         } finally {
39             typedArray.recycle();
40         }
41     }
42
43     @Override
44     public void setImageResource(int resId) {
45         super.setImageResource(resId);
46         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
47         setImageBitmap(bitmap);
48     }
49
50     @Override
51     public void setImageBitmap(Bitmap bitmap) {
52         super.setImageBitmap(bitmap);
53         setImageDrawable(round(bitmap));
54     }
55
56     private Drawable round(Bitmap bitmap) {
57         RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
58         drawable.setAntiAlias(true);
59         if (mCircular) {
60             drawable.setCircular(true);
61         }
62         if (mCornerRadius != 0) {
63             drawable.setCornerRadius(mCornerRadius);
64         }
65         return drawable;
66     }
67
68     public void setCornerRadius(int cornerRadius) {
69         mCornerRadius = cornerRadius;
70     }
71
72     public void setCircular(boolean circular) {
73         mCircular = circular;
74     }
75
76     public int getCornerRadius() {
77         return mCornerRadius;
78     }
79
80     public boolean isCircular() {
81         return mCircular;
82     }
83 }
时间: 11-17

开源项目:RoundedImageView的相关文章

优秀的 Android 开源项目

摘要  转载http://www.trinea.cn/android/android-open-source-projects-view/,方便大家找到自己合适的资料 目录[-] 一.ListView 二.ActionBar 三.Menu 四.ViewPager .Gallery 五.GridView 六.ImageView 七.ProgressBar 八.其他 GitHub上优秀Android开源项目 3. Android开发神器 1.Xabber客户端 2.oschina客户端 3.手机安全

GitHub 优秀的 Android 开源项目

转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包含ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其它如Dialog.Toast.EditText.TableView.Activity Animation等等. 一.ListView android-pulltorefresh 一个强大的拉动

【转】Android开源项目 分类 便于查看

之前转载了一个开源项目的文章,发现那些都是没有系统的总结,这里又转载一篇有系统总结的文章. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和团体篇 Android开源项目第一篇——个性化控件(View)篇 主要介绍那些不错个性化的View,包括ListView.Ac

[转]Android开源项目分类汇总

我喜欢收集源码,如今这个时代,我觉得我们要做的不是做前人做过的事,而是学习他们的经验然后在这基础上创新做出更伟大的事. 转自https://github.com/Trinea/android-open-project Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView

GitHub上史上最全的Android开源项目分类汇总

今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub地址

【转】Android开源项目

Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.其他Android开源项目第二篇——工具库篇  包括依赖注入.图片缓存.网络相关.数据库ORM工具包.Android公共库.高版本向低版本兼容库.多媒体.事件总线.传感器.安全.其他Android开源项目第三篇——优秀项目篇  比较有意思的完整的Android项目Andr

Android常用开源项目

Android常用开源项目 Android   2014-05-23 16:39:43 发布 您的评价:       4.3   收藏     24收藏 Android开源项目第一篇--个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.其他Android开源项目第二篇--工具库篇  包括依赖注入.图片缓存.网络相关.数据库ORM工具包.Android公

Android 开源项目分类汇总

目前包括: Android 开源项目第一篇--个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他Android 开源项目第二篇--工具库篇  包括依赖注入.图片缓存.网络请求.数据库 ORM 工具包.Andro

Android开源项目分类汇总

转自https://github.com/Trinea/android-open-project Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他Android开源项目第二篇—

【转】GitHub 优秀的 Android 开源项目

转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialog.Toast.EditText.TableView.Activity Animation等等. 一.ListView android-pulltorefresh 一个强大的拉动