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.RectF;
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 XCRoundRectImageView extends ImageView{
 private Paint paint;
 public XCRoundRectImageView(Context context) {
 this(context,null);
 }
 public XCRoundRectImageView(Context context, AttributeSet attrs) {
 this(context, attrs,0);
 }
 public XCRoundRectImageView(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 = getRoundBitmap(bitmap, 20);
 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 roundPx,一般设置成14
 * @return Bitmap
 * @author caizhiming
 */
 private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) {
 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());
 final RectF rectF = new RectF(rect);
 paint.setAntiAlias(true);
 canvas.drawARGB(0, 0, 0, 0);
 paint.setColor(color);
 int x = bitmap.getWidth();
 canvas.drawRoundRect(rectF, roundPx, roundPx, 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.XCRoundRectImageView
 android:id="@+id/roundRectImageView"
 android:layout_centerInParent="true"
 android:layout_width="200dp"
 android:layout_height="200dp"
 android:src="@drawable/roundimageview"
 />
</RelativeLayout>

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

(0)

相关推荐

  • Android 圆角 ImageView类可设置弧度(代码简单)

    废话不多说了,直接给大家贴代码了,具体代码如下所示: public class RoundImageView extends ImageView { private Paint paint; private int roundWidth = 50; private int roundHeight = 50; private Paint paint2; public RoundImageView(Context context, AttributeSet attrs, int defStyle)

  • Android自定义控件之圆形、圆角ImageView

    一.问题在哪里? 问题来源于app开发中一个很常见的场景--用户头像要展示成圆的:  二.怎么搞? 机智的我,第一想法就是,切一张中间圆形透明.四周与底色相同.尺寸与头像相同的蒙板图片,盖在头像上不就完事了嘛,哈哈哈! 在背景纯色的前提下,这的确能简单解决问题,但是如果背景没有这么简单呢? 在这种不规则背景下,有两个问题: 1).背景图常常是适应手机宽度缩放,而头像的尺寸又是固定宽高DP的,所以固定的蒙板图片是没法保证在不同机型上都和背景图案吻合的. 2).在这种非纯色背景下,哪天想调整一下头像

  • Android实现圆角矩形和圆形ImageView的方式

    Android中实现圆角矩形和圆形有很多种方式,其中最常见的方法有ImageLoader设置Option和自定义View. 1.ImageLoader加载图片 public static DisplayImageOptions getRoundOptions() { DisplayImageOptions options = new DisplayImageOptions.Builder() // 是否设置为圆角,弧度为多少,当弧度为90时显示的是一个圆 .displayer(new Round

  • Android自定义带圆角的ImageView

    最近有一个实现一个带有圆角的ImageView的需求,在网上找了找三方,虽然Demo都是正确的,但是移植过来就不可以了,因为请求链接的时候用的是xUtils中Bitmap来进行解析的,这样就总是会报类型转换异常的错误. 就这样只能自己定义一个了. Demo: package com.yizooo.yizooo.ui; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bi

  • Android自定义圆角ImageView控件

    目前一些比较火的图片加载库虽然支持圆角加载,若你是接的别人作了一半的项目,刚好别人用的图片加载库刚好不支持圆角加载,那么这颗控件你值得拥有.(支持网络图片的加载) 1.创建CustomImageView 类在你的项目中(源码如下) import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Bitmap.

  • Android ImageView绘制圆角效果

    前言 Android 开发中,我们经常需要实现图片的圆形/圆角的效果,我们可以使用两种方式来实现这样的效果.一种是使用Xfermode,另一种是BitmapShader来实现.下面我将分别介绍这两种用法. 使用Xfermode的方式实现 使用该方式的关键代码,如下: private Bitmap creataBitmap(Bitmap bitmap) { //用指定的一个Bitmap来构建一个画布 Bitmap target = Bitmap.createBitmap(1000,1000, Bi

  • Android自定义ImageView实现圆角功能

    使用自定义ImageView,实现圆角功能,供大家参考,具体内容如下 1.自定义属性attrs.xml <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="RoundCornerImageView"> <attr name="radius" format="dimension&

  • Android自定义圆角ImageView

    废话不多说了,直接给大家贴代码了. java类如下: import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.gra

  • Android中通过反射实现圆角ImageView代码实例

    private void init(){ paint = new Paint(Paint.ANTI_ALIAS_FLAG); roundRect = new RectF(0, 0, getWidth() , getHeight()); radius = 40; mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN) ; } 继承ImageView,在构造方法中调用,初始化Paint和Xfermode. protec

  • Android实现自定义ImageView的圆角矩形图片效果

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然后进行裁剪对应的圆角矩形的bitmap,然后在onDraw()进行绘制圆角矩形图片输出. 效果图如下: 自定义的圆形的ImageView类的实现代码如下: package com.xc.xcskin.view; import android.content.Context; import and

  • Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码

    概述:通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放. /** * 自定义的ImageView控制,可对图片进行多点触控缩放和拖动 * * @author qiuwanyong */ public class MyImageView extends ImageView { /** * 初始化状态常量 */ public static final int STATUS_INIT = 1; /** * 图片放大状态常量 */ public static final i

  • android自定义imageview实现圆角图片

    本文实例为大家分享了android自定义imageview实现圆角图片的具体代码,供大家参考,具体内容如下 自定义图片的属性,对图片进行圆角切割 实现效果图: (1)在activity_main.xml文件布局,非常简单 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

  • Android开发使用自定义View将圆角矩形绘制在Canvas上的方法

    本文实例讲述了Android开发使用自定义View将圆角矩形绘制在Canvas上的方法.分享给大家供大家参考,具体如下: 前几天,公司一个项目中,头像图片需要添加圆角,这样UI效果会更好看,于是写了一个小的demo进行圆角的定义,该处主要是使用BitmapShader进行了渲染(如果要将一张图片裁剪成椭圆或圆形显示在屏幕上,也可以使用BitmapShader来完成). BitmapShader类完成渲染图片的基本步骤如下: 1.创建BitmapShader类的对象 /** * Call this

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

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然后进行裁剪圆形的bitmap,然后在onDraw()进行绘制圆形图片输出. 效果图如下: 自定义的圆形的ImageView类的实现代码如下: package com.xc.xcskin.view; import android.content.Context; import android.grap

  • Android开发基于Drawable实现圆角矩形的方法

    本文实例讲述了Android开发基于Drawable实现圆角矩形的方法.分享给大家供大家参考,具体如下: 第一步:写个类继承drawable,重写里面的方法,实现的核心代码在draw里 关键技术:BitmapShader public BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY) 调用这个方法来产生一个画有一个位图的渲染器(Shader). bitmap 在渲染器内使用的位图 tileX The t

  • Android仿微信发朋友圈浏览图片效果

    先看一下效果吧: 下面就来说一下具体怎么实现的: 实现思路 1.首先我们要获取数据源,数据源就是我们的每条说说(包括姓名.标题.图片数组) 2.自定义适配器(ListView嵌套着GridView) 3.图片点击浏览图片(Fragment+ViewPager) 具体实现 1.初始化数据源,设置适配器,看一下代码: public class MyActivity extends Activity { /*图片显示列表*/ private ListView listView; /*图片URL数组*/

  • Android通过自定义view实现刮刮乐效果详解

    前言 已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来.原因是有一些原理性的东西还没了解清楚,最近抽时间研究了一下混合模式,终于也理解了刮刮乐是怎么实现的,所以想继续分享一下自己的一些心得,先上效果图. 效果图: 实现原理 其实刮刮乐实现原理也不算很复杂,最关键的还是需要了解Paint的混合模式.因为刮刮乐是由两个bitmap组成的,一个是源图另一个是目标图,我们需要把目标图的颜色改成灰色,在源图上面盖上了一张灰色的目标图.当手指滑动屏幕时paint

  • Android 使用自定义RecyclerView控件实现Gallery效果

    上篇文章给大家介绍了Android 自定义 HorizontalScrollView 打造多图片OOM 的横向滑动效果.其实制作横向滚动的不得不说另一个控件,就是Google官方最近新增加的RecyclerView,据说是ListView的升级版本,本篇文章,首先介绍RecyclerView的用法,然后经行一定的分析:最后自定义一下RecyclerView实现我们需要的相册效果. 1.RecyclerView的基本用法 首先主Activity的布局文件: <RelativeLayout xmln

随机推荐