Android使用自定义ImageView实现圆形图片效果

 更新时间:2018年05月16日 09:48:32   作者:Jamy Cai  
本篇文章主要介绍了Android使用自定义ImageView实现圆形图片效果,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然后进行裁剪圆形的bitmap,然后在onDraw()进行绘制圆形图片输出。

效果图如下:

自定义的圆形的ImageView类的实现代码如下:

package com.xc.xcskin.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
 * 自定义的圆形ImageView,可以直接当组件在布局中使用。
 * @author caizhiming
 *
 */
public class XCRoundImageView extends ImageView{
 private Paint paint ;
 public XCRoundImageView(Context context) { 
 this(context,null); 
 } 
 public XCRoundImageView(Context context, AttributeSet attrs) { 
 this(context, attrs,0); 
 } 
 public XCRoundImageView(Context context, AttributeSet attrs, int defStyle) { 
 super(context, attrs, defStyle); 
 paint = new Paint();
 } 
 /**
 * 绘制圆形图片
 * @author caizhiming
 */
 @Override 
 protected void onDraw(Canvas canvas) { 
 Drawable drawable = getDrawable(); 
 if (null != drawable) { 
 Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
 Bitmap b = getCircleBitmap(bitmap, 14); 
 final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight()); 
 final Rect rectDest = new Rect(0,0,getWidth(),getHeight());
 paint.reset(); 
 canvas.drawBitmap(b, rectSrc, rectDest, paint); 
 } else { 
 super.onDraw(canvas); 
 } 
 } 
 /**
 * 获取圆形图片方法
 * @param bitmap
 * @param pixels
 * @return Bitmap
 * @author caizhiming
 */
 private Bitmap getCircleBitmap(Bitmap bitmap, int pixels) { 
 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
 bitmap.getHeight(), Config.ARGB_8888); 
 Canvas canvas = new Canvas(output); 
 final int color = 0xff424242;
 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
 paint.setAntiAlias(true); 
 canvas.drawARGB(0, 0, 0, 0); 
 paint.setColor(color); 
 int x = bitmap.getWidth(); 
 canvas.drawCircle(x / 2, x / 2, x / 2, paint); 
 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
 canvas.drawBitmap(bitmap, rect, rect, paint); 
 return output; 
 
 } 
} 

完成这个自定义类后,就可以使用这个类了,就是把这个当组件在布局中使用即可,比如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent" > 
 <com.xc.xcskin.view.XCRoundImageView
 android:id="@+id/roundImageView" 
 android:layout_centerInParent="true" 
 android:layout_width="200dp" 
 android:layout_height="200dp"
 android:src="@drawable/roundimageview"
 /> 
</RelativeLayout>

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Android编程实现震动与振铃的方法详解

    Android编程实现震动与振铃的方法详解

    这篇文章主要介绍了Android编程实现震动与振铃的方法,结合实例形式分析了Android实现震动与振铃的Vibrator类及MediaPlayer类相关使用技巧,需要的朋友可以参考下
    2018-03-03
  • Android Recyclerview实现上拉加载更多功能

    Android Recyclerview实现上拉加载更多功能

    在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能。下文给大家带来了Android Recyclerview上拉加载更多功能,需要的朋友参考下吧
    2017-05-05
  • android studio 打包自动生成版本号与日期,apk输入路径详解

    android studio 打包自动生成版本号与日期,apk输入路径详解

    这篇文章主要介绍了android studio 打包自动生成版本号与日期,apk输入路径详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • linphone-sdk-android版本号生成解析

    linphone-sdk-android版本号生成解析

    这篇文章主要为大家介绍了linphone-sdk-android版本号生成解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 浅谈Android Classloader动态加载分析

    浅谈Android Classloader动态加载分析

    这篇文章主要介绍了浅谈Android Classloader动态加载分析,详细的介绍了ClassLoader概念、分类,具有一定的参考价值,有兴趣的可以了解一下
    2018-03-03
  • Android如何监听屏幕旋转

    Android如何监听屏幕旋转

    这篇文章主要介绍了如何监听Android屏幕旋转,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-03-03
  • Android实现跨进程接口回掉的方法

    Android实现跨进程接口回掉的方法

    这篇文章主要给大家介绍了关于Android如何实现跨进程接口回掉的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Android webview与js的数据交互

    Android webview与js的数据交互

    有了WebView这个组件,Android应用开发技术也就转嫁到html与java数据交互上来。说白了就是js与WebView的数据交互,这就是本文所要讨论的
    2017-04-04
  • Android自制九宫格解锁控件

    Android自制九宫格解锁控件

    这篇文章主要为大家详细介绍了Android自制九宫格解锁控件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • android使用Rxjava实现倒计时功能

    android使用Rxjava实现倒计时功能

    这篇文章主要为大家详细介绍了android使用Rxjava实现倒计时功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论