精华内容
下载资源
问答
  • 自定义ImageView圆角

    2018-06-14 14:49:30
    自定义ImageView圆角的效果图: 代码实现:   public class BannerRadiusImageView extends android.support.v7.widget.AppCompatImageView { private float mRadus = getContext().getResources()....

    自定义ImageView为圆角的效果图:

    代码实现:

     

    public class BannerRadiusImageView extends android.support.v7.widget.AppCompatImageView {
    
        private float mRadus = getContext().getResources().getDimensionPixelSize(R.dimen.dp10);
    
        /*圆角的半径,依次为左上角xy半径,右上角,右下角,左下角*/
        private float[] rids = {mRadus, mRadus, mRadus, mRadus, mRadus, mRadus, mRadus, mRadus};
    
        public BannerRadiusImageView(Context context) {
            super(context);
        }
    
        public BannerRadiusImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public BannerRadiusImageView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
    
        /**
         * 画图
         * @param canvas
         */
        protected void onDraw(Canvas canvas) {
            Path path = new Path();
            int w = this.getWidth();
            int h = this.getHeight();
            /*向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8*/
            path.addRoundRect(new RectF(0,0,w,h),rids, Path.Direction.CW);
            canvas.clipPath(path);
            super.onDraw(canvas);
        }
    
        /**
         * 设置ImageView为正方形
         */
    //    @Override
    //    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    //        setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));
    //        int childWidthSize = getMeasuredWidth();
    //        // 高度和宽度一样
    //        heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, MeasureSpec.EXACTLY);
    //        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //    }
    }
    

     

    1、有想做副业,业余开店的,推荐“贝店”,

         应用市场下载“贝店”,注册,输入邀请码 1530973, 即可体验!

    2、另外可以关注我的公众号“生活与认知”;

    展开全文
  • android自定义ImageView,圆角和圆形,抗锯齿.亲测可用。直接拷贝代码就行。
  • 自定义ImageView圆角,椭圆,圆形图片 开发中一个很常见的场景——用户头像要展示成圆的: 在这种不规则背景下,有两个问题: 1)、背景图常常是适应手机宽度缩放,而头像的尺寸又是固定宽高DP的,所以...
    自定义ImageView圆角,椭圆,圆形图片
    开发中一个很常见的场景——用户头像要展示成圆的:
    在这种不规则背景下,有两个问题:

    1)、背景图常常是适应手机宽度缩放,而头像的尺寸又是固定宽高DP的,所以固定的蒙板图片是没法保证在不同机型上都和背景图案吻合的。

    2)、在这种非纯色背景下,哪天想调整一下头像位置就得重新换图片蒙板,实在是太难维护了……

    所以呢,既然头像图片肯定是方的,那就就让ImageView圆起来吧。

    下面开始写代码自定义imageView圆形:

    public class ImageViewPlus extends ImageView{
      private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
      private Bitmap mRawBitmap;
      private BitmapShader mShader;
      private Matrix mMatrix = new Matrix();
       
      public ImageViewPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
       
      @Override
      protected void onDraw(Canvas canvas) {
        Bitmap rawBitmap = getBitmap(getDrawable());
        if (rawBitmap != null){
          int viewWidth = getWidth();
          int viewHeight = getHeight();
          int viewMinSize = Math.min(viewWidth, viewHeight);
          float dstWidth = viewMinSize;
          float dstHeight = viewMinSize;
          if (mShader == null || !rawBitmap.equals(mRawBitmap)){
            mRawBitmap = rawBitmap;
            mShader = new BitmapShader(mRawBitmap, TileMode.CLAMP, TileMode.CLAMP);
          }
          if (mShader != null){
            mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());
            mShader.setLocalMatrix(mMatrix);
          }
          mPaintBitmap.setShader(mShader);
          float radius = viewMinSize / 2.0f;
          canvas.drawCircle(radius, radius, radius, mPaintBitmap);
        } else {
          super.onDraw(canvas);
        }
      }
     
      private Bitmap getBitmap(Drawable drawable){
        if (drawable instanceof BitmapDrawable){
          return ((BitmapDrawable)drawable).getBitmap();
        } else if (drawable instanceof ColorDrawable){
          Rect rect = drawable.getBounds();
          int width = rect.right - rect.left;
          int height = rect.bottom - rect.top;
          int color = ((ColorDrawable)drawable).getColor();
          Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
          Canvas canvas = new Canvas(bitmap);
          canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
          return bitmap;
        } else {
          return null;
        }
      }
    }
    分析一下代码:

    canvas.drawCircle 决定了画出来的形状是圆形,而圆形的内容则是通过 mPaintBitmap.setShader 搞定的。

    其中,BitmapShader需要设置Bitmap填充ImageView的方式(CLAMP:拉伸边缘, MIRROR:镜像, REPEAT:整图重复)。

    这里其实设成什么不重要,因为我们实际需要的是将Bitmap按比例缩放成跟ImageView一样大,而不是预置的三种效果。

    所以,别忘了 mMatrix.setScale 和 mShader.setLocalMatrix 一起用,将图片缩放一下。

    更多玩法 —— 支持边框:

    public class ImageViewPlus extends ImageView{
      private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
      private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG);
      private Bitmap mRawBitmap;
      private BitmapShader mShader;
      private Matrix mMatrix = new Matrix();
      private float mBorderWidth = dip2px(15);
      private int mBorderColor = 0xFF0080FF;
       
      public ImageViewPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
      }
       
      @Override
      protected void onDraw(Canvas canvas) {
        Bitmap rawBitmap = getBitmap(getDrawable());
        if (rawBitmap != null){
          int viewWidth = getWidth();
          int viewHeight = getHeight();
          int viewMinSize = Math.min(viewWidth, viewHeight);
          float dstWidth = viewMinSize;
          float dstHeight = viewMinSize;
          if (mShader == null || !rawBitmap.equals(mRawBitmap)){
            mRawBitmap = rawBitmap;
            mShader = new BitmapShader(mRawBitmap, TileMode.CLAMP, TileMode.CLAMP);
          }
          if (mShader != null){
            mMatrix.setScale((dstWidth - mBorderWidth * 2) / rawBitmap.getWidth(), (dstHeight - mBorderWidth * 2) / rawBitmap.getHeight());
            mShader.setLocalMatrix(mMatrix);
          }
          mPaintBitmap.setShader(mShader);
          mPaintBorder.setStyle(Paint.Style.STROKE);
          mPaintBorder.setStrokeWidth(mBorderWidth);
          mPaintBorder.setColor(mBorderColor);
          float radius = viewMinSize / 2.0f;
          canvas.drawCircle(radius, radius, radius - mBorderWidth / 2.0f, mPaintBorder);
          canvas.translate(mBorderWidth, mBorderWidth);
          canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius - mBorderWidth, mPaintBitmap);
        } else {
          super.onDraw(canvas);
        }
      }
     
      private Bitmap getBitmap(Drawable drawable){
        if (drawable instanceof BitmapDrawable){
          return ((BitmapDrawable)drawable).getBitmap();
        } else if (drawable instanceof ColorDrawable){
          Rect rect = drawable.getBounds();
          int width = rect.right - rect.left;
          int height = rect.bottom - rect.top;
          int color = ((ColorDrawable)drawable).getColor();
          Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
          Canvas canvas = new Canvas(bitmap);
          canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
          return bitmap;
        } else {
          return null;
        }
      }
       
      private int dip2px(int dipVal)
      {
        float scale = getResources().getDisplayMetrics().density;
        return (int)(dipVal * scale + 0.5f);
      }
    }


    看代码中,加边框实际上就是用实心纯色的 Paint 画了一个圆边,在此基础上画上原来的头像即可。

    需要的注意的地方有三个:

    1)、圆框的半径不是 radius ,而应该是 radius - mBorderWidth / 2.0f 。想象着拿着笔去画线,线其实是画在右图中白色圈的位置,只不过它很粗。

    2)、在ImageView大小不变的基础上,头像的实际大小要比没有边框的时候小了,所以 mMatrix.setScale 的时候要把边框的宽度去掉。

    3)、画头像Bitmap的时候不能直接 canvas.drawCircle(radius, radius, radius - mBorderWidth, mPaintBitmap) ,这样你会发现头像的右侧和下方边缘被拉伸了(右图)

    为什么呢?因为 Paint 默认是以左上角为基准开始绘制的,此时头像的实际区域是右图中的红框,而超过红框的部分(圆形的右侧和下方),自然被 TileMode.CLAMP效果沿边缘拉伸了。

    所以,需要通过挪动坐标系的位置和调整圆心,才能把头像画在正确的区域(右图绿框)中。

    更多玩法 —— 支持xml配置

    既然有了边框,那如果想配置边框的宽度和颜色该如何是好呢?

    基本上两个思路:

    1)、给ImageViewPlus加上set接口,设置完成之后通过 invalidate(); 重绘一下即可;

    2)、在xml里就支持配置一些自定义属性,这样用起来会方便很多。

    这里重点说一下支持xml配置自定义属性。

    自定义控件要支持xml配置自定义属性的话,首先需要在 \res\values 里去定义属性:


    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
      <attr name="borderColor" format="color" />
      <attr name="borderWidth" format="dimension" />
     
      <declare-styleable name="ImageViewPlus"> 
        <attr name="borderColor" />
        <attr name="borderWidth" />
      </declare-styleable> 
    </resources> 


     然后在ImageViewPlus的构造函数中去读取这些自定义属性:

    private static final int DEFAULT_BORDER_COLOR = Color.TRANSPARENT;
      private static final int DEFAULT_BORDER_WIDTH = 0;
       
      public ImageViewPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
        //取xml文件中设定的参数
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ImageViewPlus);
        mBorderColor = ta.getColor(R.styleable.ImageViewPlus_borderColor, DEFAULT_BORDER_COLOR);
        mBorderWidth = ta.getDimensionPixelSize(R.styleable.ImageViewPlus_borderWidth, dip2px(DEFAULT_BORDER_WIDTH));
        ta.recycle();
      }
     在xml布局中使用自定义属性:
     

    更多玩法 —— 圆角ImageView

    <cc.snser.imageviewplus.ImageViewPlus
        android:id="@+id/imgplus"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:layout_marginBottom="50dp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/img_square"
        snser:borderColor="#FF0080FF"
        snser:borderWidth="15dp" />


    搞定了圆形ImageView以及对应的边框,那如何实现下面这种圆角的ImageView呢?

    其实原理上一样,把 canvas.drawCircle 对应改成 canvas.drawRoundRect 就OK了,直接贴代码吧:

    public class ImageViewPlus extends ImageView{
      /**
       * android.widget.ImageView
       */
      public static final int TYPE_NONE = 0;
      /**
       * 圆形
       */
      public static final int TYPE_CIRCLE = 1;
      /**
       * 圆角矩形
       */
      public static final int TYPE_ROUNDED_RECT = 2;  
       
      private static final int DEFAULT_TYPE = TYPE_NONE;
      private static final int DEFAULT_BORDER_COLOR = Color.TRANSPARENT;
      private static final int DEFAULT_BORDER_WIDTH = 0;
      private static final int DEFAULT_RECT_ROUND_RADIUS = 0;
       
      private int mType;
      private int mBorderColor;
      private int mBorderWidth;
      private int mRectRoundRadius;
       
      private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
      private Paint mPaintBorder = new Paint(Paint.ANTI_ALIAS_FLAG);
       
      private RectF mRectBorder = new RectF();
      private RectF mRectBitmap = new RectF();
       
      private Bitmap mRawBitmap;
      private BitmapShader mShader;
      private Matrix mMatrix = new Matrix();
       
      public ImageViewPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
        //取xml文件中设定的参数
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ImageViewPlus);
        mType = ta.getInt(R.styleable.ImageViewPlus_type, DEFAULT_TYPE);
        mBorderColor = ta.getColor(R.styleable.ImageViewPlus_borderColor, DEFAULT_BORDER_COLOR);
        mBorderWidth = ta.getDimensionPixelSize(R.styleable.ImageViewPlus_borderWidth, dip2px(DEFAULT_BORDER_WIDTH));
        mRectRoundRadius = ta.getDimensionPixelSize(R.styleable.ImageViewPlus_rectRoundRadius, dip2px(DEFAULT_RECT_ROUND_RADIUS));
        ta.recycle();
      }
       
      @Override
      protected void onDraw(Canvas canvas) {
        Bitmap rawBitmap = getBitmap(getDrawable());
         
        if (rawBitmap != null && mType != TYPE_NONE){
          int viewWidth = getWidth();
          int viewHeight = getHeight();
          int viewMinSize = Math.min(viewWidth, viewHeight);
          float dstWidth = mType == TYPE_CIRCLE ? viewMinSize : viewWidth;
          float dstHeight = mType == TYPE_CIRCLE ? viewMinSize : viewHeight;
          float halfBorderWidth = mBorderWidth / 2.0f;
          float doubleBorderWidth = mBorderWidth * 2;
           
          if (mShader == null || !rawBitmap.equals(mRawBitmap)){
            mRawBitmap = rawBitmap;
            mShader = new BitmapShader(mRawBitmap, TileMode.CLAMP, TileMode.CLAMP);
          }
          if (mShader != null){
            mMatrix.setScale((dstWidth - doubleBorderWidth) / rawBitmap.getWidth(), (dstHeight - doubleBorderWidth) / rawBitmap.getHeight());
            mShader.setLocalMatrix(mMatrix);
          }
           
          mPaintBitmap.setShader(mShader);
          mPaintBorder.setStyle(Paint.Style.STROKE);
          mPaintBorder.setStrokeWidth(mBorderWidth);
          mPaintBorder.setColor(mBorderWidth > 0 ? mBorderColor : Color.TRANSPARENT);
           
          if (mType == TYPE_CIRCLE){
            float radius = viewMinSize / 2.0f;
            canvas.drawCircle(radius, radius, radius - halfBorderWidth, mPaintBorder);
            canvas.translate(mBorderWidth, mBorderWidth);
            canvas.drawCircle(radius - mBorderWidth, radius - mBorderWidth, radius - mBorderWidth, mPaintBitmap);
          } else if (mType == TYPE_ROUNDED_RECT){
            mRectBorder.set(halfBorderWidth, halfBorderWidth, dstWidth - halfBorderWidth, dstHeight - halfBorderWidth);
            mRectBitmap.set(0.0f, 0.0f, dstWidth - doubleBorderWidth, dstHeight - doubleBorderWidth);
            float borderRadius = mRectRoundRadius - halfBorderWidth > 0.0f ? mRectRoundRadius - halfBorderWidth : 0.0f;
            float bitmapRadius = mRectRoundRadius - mBorderWidth > 0.0f ? mRectRoundRadius - mBorderWidth : 0.0f;
            canvas.drawRoundRect(mRectBorder, borderRadius, borderRadius, mPaintBorder);
            canvas.translate(mBorderWidth, mBorderWidth);
            canvas.drawRoundRect(mRectBitmap, bitmapRadius, bitmapRadius, mPaintBitmap);
          }
        } else {
          super.onDraw(canvas);
        }
      }
     
      private int dip2px(int dipVal)
      {
        float scale = getResources().getDisplayMetrics().density;
        return (int)(dipVal * scale + 0.5f);
      }
       
      private Bitmap getBitmap(Drawable drawable){
        if (drawable instanceof BitmapDrawable){
          return ((BitmapDrawable)drawable).getBitmap();
        } else if (drawable instanceof ColorDrawable){
          Rect rect = drawable.getBounds();
          int width = rect.right - rect.left;
          int height = rect.bottom - rect.top;
          int color = ((ColorDrawable)drawable).getColor();
          Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
          Canvas canvas = new Canvas(bitmap);
          canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
          return bitmap;
        } else {
          return null;
        }
      }
    }

     <cc.snser.imageviewplus.ImageViewPlus
        android:id="@+id/imgplus"
        android:layout_width="200dp"
        android:layout_height="300dp"
        android:layout_marginBottom="50dp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:src="@drawable/img_rectangle"
        snser:type="rounded_rect"
        snser:borderColor="#FF0080FF"
        snser:borderWidth="10dp"
        snser:rectRoundRadius="30dp" />


    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
      <attr name="type"> 
        <enum name="none" value="0" /> 
        <enum name="circle" value="1" /> 
        <enum name="rounded_rect" value="2" />
      </attr>
      <attr name="borderColor" format="color" />
      <attr name="borderWidth" format="dimension" />
      <attr name="rectRoundRadius" format="dimension" />
     
      <declare-styleable name="ImageViewPlus"> 
        <attr name="type" />
        <attr name="borderColor" />
        <attr name="borderWidth" />
        <attr name="rectRoundRadius" />
      </declare-styleable>
    </resources> 
    OK大功告成
    展开全文
  • 自定义ImageView 圆角shape

    千次阅读 2015-12-10 23:33:07
    /**  *  * 转载请标明出处:http://blog.csdn.net/u013598111/article/details/50208349  * @author:【JunTao_sun】  *  * */ ...package com.example.imageview; import android.content.Context; import



    /**

     *
     * 转载请标明出处:
    http://blog.csdn.net/u013598111/article/details/50256847

     *   @author:【JunTao_sun】
     *
     *
    */




    package com.example.imageview;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.Bitmap.Config;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import android.graphics.drawable.BitmapDrawable;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.animation.Animation;
    import android.widget.ImageView;
    import android.widget.OverScroller;
    
    public class CustomView extends ImageView {
    
    	private static final String TAG = null;
    	private Paint mPaint;
    	private Bitmap bitmap;
    
    	public CustomView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    		mPaint.setDither(true);
    		mPaint.setColor(0xff0000ff);
    		// OverScroller
    	}
    
    	private void drawBitmap(Bitmap src) {
    		//关闭硬件加速
    		setLayerType(LAYER_TYPE_SOFTWARE, null);
    
    		bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(),
    				Config.ARGB_8888);
    		Canvas c = new Canvas();
    
    		c.setBitmap(bitmap);
    
    		// Dst 圆矩形 
    		c.drawRoundRect(new RectF(0, 0, getWidth(), getHeight()), 20, 20,
    				mPaint);
    		
    		mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    		// src
    		c.drawBitmap(src, 0, 0, mPaint);
    
    	}
    
    	@Override
    	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    		// TODO Auto-generated method stub
    		super.onSizeChanged(w, h, oldw, oldh);
    
    		BitmapDrawable bd = (BitmapDrawable) getDrawable();
    		Bitmap mBitmap = bd.getBitmap();
    		float rate = Math.max(getWidth() * 1.0f / mBitmap.getWidth(),
    				getWidth() * 1.0f / mBitmap.getHeight());
    		// mBitmap.setWidth((int) (rate*mBitmap.getWidth())); 不能直接设置
    		// mBitmap.setHeight((int) (rate*mBitmap.getHeight()));
    		// 缩小图片
    		mBitmap = Bitmap.createScaledBitmap(mBitmap,
    				(int) (rate * mBitmap.getWidth()),
    				(int) (rate * mBitmap.getHeight()), true);
    
    		drawBitmap(mBitmap);
    
    	}
    .
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		canvas.drawBitmap(bitmap, 0, 0, null);
    
    	}
    
    }
    


    展开全文
  • /** * @author xiayiye5 * 2020年11月14日15:21:42 * 自定义圆角图片 */ @SuppressLint("AppCompatCustomView") public class RadiusImageView extends ImageView { /** * 圆角大小 */ private int radiusSize = ...

    老套路看图:

    实现方法非常简单,使用ClipPath切割就可以了:

    完整代码如下:dpUtils工具类就不发了,自己写下吧

    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Path;
    import android.support.annotation.Nullable;
    import android.util.AttributeSet;
    import android.widget.ImageView;
    
    import com.gfan.xiayiye5.utils.DpUtils;
    
    /**
     * @author xiayiye5
     * 2020年11月14日15:21:42
     * 自定义圆角图片
     */
    @SuppressLint("AppCompatCustomView")
    public class RadiusImageView extends ImageView {
    
        /**
         * 圆角大小
         */
        private int radiusSize = DpUtils.dip2px(getContext(), 10);
    
        public RadiusImageView(Context context) {
            super(context, null);
        }
    
        public RadiusImageView(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs, 0);
        }
    
        public RadiusImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        private void init() {
        }
    
        /**
         * 设置圆角大小,设置后需要再次刷新下当前view,使用invalidate()或者postInvalidate()刷新都可以的
         *
         * @param size dp值
         */
        public void setRadiusSize(int size) {
            radiusSize = DpUtils.dip2px(getContext(), size);
            invalidate();
    //        postInvalidate();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            if (getWidth() > radiusSize && getHeight() > radiusSize) {
                @SuppressLint("DrawAllocation")
                Path path = new Path();
                path.moveTo(radiusSize, 0);
                path.lineTo(getWidth() - radiusSize, 0);
                path.quadTo(getWidth(), 0, getWidth(), radiusSize);
                path.lineTo(getWidth(), getHeight() - radiusSize);
                path.quadTo(getWidth(), getHeight(), getWidth() - radiusSize, getHeight());
                path.lineTo(radiusSize, getHeight());
                path.quadTo(0, getHeight(), 0, getHeight() - radiusSize);
                path.lineTo(0, radiusSize);
                path.quadTo(0, 0, radiusSize, 0);
                canvas.clipPath(path);
            }
            super.onDraw(canvas);
        }
    }
    

    如何使用呢?

    在布局中直接使用该控件就可以了:

    <!-- 下面的com.gfan.xiayiye5.view.RadiusImageView换成自己路径就好了 -->
    
    <com.gfan.xiayiye5.view.RadiusImageView
            android:id="@+id/ivLastLoginId"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_below="@+id/tvLastLoginId" />

    再次非常感谢原博主:博主链接

     

    展开全文
  • 主要为大家详细介绍了Android自定义ImageView实现圆角功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 自定义ImageView实现圆角
  • 主要为大家详细介绍了android自定义imageview实现圆角图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 自定义ImageView实现圆角图片,满足以下需求: 1、四个角的度数均要支持自定义 2、可以在布局当中添加自定义的度数 实现步骤: 1、自定义一个ImageView,继承自AppCompatImageView。 (关于AppCompatImageView,继承...
  • 自定义ImageView 方法一:BitmapShader方式 首先简单了解下BitmapShader BitmapShader是Shader的子类 Shader在三维软件中我们称之为着色器 通俗的理解,Shader的作用是给图像着色或者上色 BitmapShader允许我们载入...
  • android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然后进行裁剪对应的圆角矩形的...
  • 自定义圆角图片,能设置任意圆角角度显示.翻遍用户的开发和使用
  • Android 自定义imageview实现图片圆角,圆形图片,椭圆形图片,不需要添加依赖,简洁实现
  • 自定义ImageView实现圆角矩形

    千次阅读 2015-09-22 12:16:30
    Android自带的imageView是矩形了,如果要自定义实现imageview的其他形状,如圆形。圆角矩形之类的。下面就来实现圆角矩形, 原理是:先取得图片的Bitmap,然后进行裁剪对应的圆角矩形的Bitmap,然后在onDraw()进行...
  • Android View自定义ImageView实现圆角

    千次阅读 热门讨论 2021-01-21 11:36:34
    本篇Blog记录圆角ImageView的实现 先说下思路 获取配置属性 判断裁剪方式 绘制 下面正式开始 获取配置属性 我们现在attrs中定义相关属性 <declare-styleable name="RoundImageView"> <attr name=...
  • 提示:可支持四角自定义圆角大小的自定义ImageView。 提示:以下是本篇文章正文内容,下面案例可供参考 一、使用步骤 1.代码中使用方法 在Java中使用代码如下(示例): CustomRoundAngleImageView view = holder....
  • 自定义ImageView(圆角)

    2020-06-19 13:44:25
    //四个圆角 path.moveTo(20, 0); path.lineTo(width - 20, 0); path.quadTo(width, 0, width, 20); path.lineTo(width, height - 20); path.quadTo(width, height, width - 20, height); path.lineTo(20, height); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 462
精华内容 184
关键字:

自定义imageview圆角