精华内容
下载资源
问答
  • 安卓开发中,经常需要用到圆形图片,有的时候美工只给了方形图片,需要我们自己转化成圆形图片,并且在外面添加边框(边框颜色,线条粗细)。本文参考GitHub中的CircleImageView项目(原项目是在Android Studio开发...
    
    

    安卓开发中,经常需要用到圆形图片,有的时候美工只给了方形图片,需要我们自己转化成圆形图片,并且在外面添加边框(边框颜色,线条粗细)。本文参考GitHub中的CircleImageView项目(原项目是在Android Studio开发的),现在将项目移植到Ecliplse中,并且说明了使用方法,具体有两种使用方法。

    1.将项目作为类库引用到项目中。

    (1)下载CircleImageView(改造的Eclipse版本)项目导入到Eclipse。

    (2)将项目引入到开发项目中,右键项目-->Properties-->Android-->Add。下图所示


    (3)在布局文件中添加xmlns:app="http://schemas.android.com/apk/res-auto"

    (4)需要用到的属性在values/attrs.xml中已经定义。

    2.直接使用导出的jar包。

    (1)将工程导出jar包。只要选择src 和gen两个目录即可。

    (2)将values/attrs.xml中的定义的属性添加进去。

    <resources>
        <declare-styleable name="CircleImageView">
            <attr name="civ_border_width" format="dimension" />
            <attr name="civ_border_color" format="color" />
            <attr name="civ_border_overlay" format="boolean" />
            <attr name="civ_fill_color" format="color" />
        </declare-styleable>
    </resources>

    (3)在布局文件中添加xmlns:app="http://schemas.android.com/apk/res-auto"


    参考:https://github.com/hdodenhof/CircleImageView,最后祝大家生活愉快,工作顺利!

    改造后的Eclipse版本CircleImageView项目以及jar包(circle_image_view.jar)下载地址:链接:http://pan.baidu.com/s/1mio2ml6 密码:3czz



    展开全文
  • ​ 在安卓开发中,我们常常会碰到一些圆形图片控件的困扰,而选择一款方便的圆形图片控件便成为了提高开发效率的有效手段,下面我推荐一款github上的项目,也是我本人经常使用的一款控件,因为用的比较多,随mark...

    CircleImageView的使用

    ​ 在安卓开发中,我们常常会碰到一些圆形图片控件的困扰,而选择一款方便的圆形图片控件便成为了提高开发效率的有效手段,下面我推荐一款github上的项目,也是我本人经常使用的一款控件,因为用的比较多,随mark下来以方便下次使用

    项目地址:

    https://github.com/hdodenhof/CircleImageView

    在这里插入图片描述

    1,引入代码文件:

    代码如下:

    package com.example.myapplication;
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Bitmap;
    import android.graphics.BitmapShader;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorFilter;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.RectF;
    import android.graphics.Shader;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.ColorDrawable;
    import android.graphics.drawable.Drawable;
    import android.net.Uri;
    import android.support.annotation.ColorInt;
    import android.support.annotation.ColorRes;
    import android.support.annotation.DrawableRes;
    import android.util.AttributeSet;
    import android.widget.ImageView;
    
    public class CircleImageView extends android.support.v7.widget.AppCompatImageView {
    
        private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;
    
        private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
        private static final int COLORDRAWABLE_DIMENSION = 2;
    
        private static final int DEFAULT_BORDER_WIDTH = 0;
        private static final int DEFAULT_BORDER_COLOR = Color.BLACK;
        private static final int DEFAULT_FILL_COLOR = Color.TRANSPARENT;
        private static final boolean DEFAULT_BORDER_OVERLAY = false;
    
        private final RectF mDrawableRect = new RectF();
        private final RectF mBorderRect = new RectF();
    
        private final Matrix mShaderMatrix = new Matrix();
        private final Paint mBitmapPaint = new Paint();
        private final Paint mBorderPaint = new Paint();
        private final Paint mFillPaint = new Paint();
    
        private int mBorderColor = DEFAULT_BORDER_COLOR;
        private int mBorderWidth = DEFAULT_BORDER_WIDTH;
        private int mFillColor = DEFAULT_FILL_COLOR;
    
        private Bitmap mBitmap;
        private BitmapShader mBitmapShader;
        private int mBitmapWidth;
        private int mBitmapHeight;
    
        private float mDrawableRadius;
        private float mBorderRadius;
    
        private ColorFilter mColorFilter;
    
        private boolean mReady;
        private boolean mSetupPending;
        private boolean mBorderOverlay;
        private boolean mDisableCircularTransformation;
    
        public CircleImageView(Context context) {
            super(context);
    
            init();
        }
    
        public CircleImageView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
    
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);
    
            mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH);
            mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR);
            mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY);
            mFillColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, DEFAULT_FILL_COLOR);
    
            a.recycle();
    
            init();
        }
    
        private void init() {
            super.setScaleType(SCALE_TYPE);
            mReady = true;
    
            if (mSetupPending) {
                setup();
                mSetupPending = false;
            }
        }
    
        @Override
        public ScaleType getScaleType() {
            return SCALE_TYPE;
        }
    
        @Override
        public void setScaleType(ScaleType scaleType) {
            if (scaleType != SCALE_TYPE) {
                throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType));
            }
        }
    
        @Override
        public void setAdjustViewBounds(boolean adjustViewBounds) {
            if (adjustViewBounds) {
                throw new IllegalArgumentException("adjustViewBounds not supported.");
            }
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            if (mDisableCircularTransformation) {
                super.onDraw(canvas);
                return;
            }
    
            if (mBitmap == null) {
                return;
            }
    
            if (mFillColor != Color.TRANSPARENT) {
                canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mFillPaint);
            }
            canvas.drawCircle(mDrawableRect.centerX(), mDrawableRect.centerY(), mDrawableRadius, mBitmapPaint);
            if (mBorderWidth > 0) {
                canvas.drawCircle(mBorderRect.centerX(), mBorderRect.centerY(), mBorderRadius, mBorderPaint);
            }
        }
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            setup();
        }
    
        @Override
        public void setPadding(int left, int top, int right, int bottom) {
            super.setPadding(left, top, right, bottom);
            setup();
        }
    
        @Override
        public void setPaddingRelative(int start, int top, int end, int bottom) {
            super.setPaddingRelative(start, top, end, bottom);
            setup();
        }
    
        public int getBorderColor() {
            return mBorderColor;
        }
    
        public void setBorderColor(@ColorInt int borderColor) {
            if (borderColor == mBorderColor) {
                return;
            }
    
            mBorderColor = borderColor;
            mBorderPaint.setColor(mBorderColor);
            invalidate();
        }
    
        /**
         * @deprecated Use {@link #setBorderColor(int)} instead
         */
        @Deprecated
        public void setBorderColorResource(@ColorRes int borderColorRes) {
            setBorderColor(getContext().getResources().getColor(borderColorRes));
        }
    
        /**
         * Return the color drawn behind the circle-shaped drawable.
         *
         * @return The color drawn behind the drawable
         *
         * @deprecated Fill color support is going to be removed in the future
         */
        @Deprecated
        public int getFillColor() {
            return mFillColor;
        }
    
        /**
         * Set a color to be drawn behind the circle-shaped drawable. Note that
         * this has no effect if the drawable is opaque or no drawable is set.
         *
         * @param fillColor The color to be drawn behind the drawable
         *
         * @deprecated Fill color support is going to be removed in the future
         */
        @Deprecated
        public void setFillColor(@ColorInt int fillColor) {
            if (fillColor == mFillColor) {
                return;
            }
    
            mFillColor = fillColor;
            mFillPaint.setColor(fillColor);
            invalidate();
        }
    
        /**
         * Set a color to be drawn behind the circle-shaped drawable. Note that
         * this has no effect if the drawable is opaque or no drawable is set.
         *
         * @param fillColorRes The color resource to be resolved to a color and
         *                     drawn behind the drawable
         *
         * @deprecated Fill color support is going to be removed in the future
         */
        @Deprecated
        public void setFillColorResource(@ColorRes int fillColorRes) {
            setFillColor(getContext().getResources().getColor(fillColorRes));
        }
    
        public int getBorderWidth() {
            return mBorderWidth;
        }
    
        public void setBorderWidth(int borderWidth) {
            if (borderWidth == mBorderWidth) {
                return;
            }
    
            mBorderWidth = borderWidth;
            setup();
        }
    
        public boolean isBorderOverlay() {
            return mBorderOverlay;
        }
    
        public void setBorderOverlay(boolean borderOverlay) {
            if (borderOverlay == mBorderOverlay) {
                return;
            }
    
            mBorderOverlay = borderOverlay;
            setup();
        }
    
        public boolean isDisableCircularTransformation() {
            return mDisableCircularTransformation;
        }
    
        public void setDisableCircularTransformation(boolean disableCircularTransformation) {
            if (mDisableCircularTransformation == disableCircularTransformation) {
                return;
            }
    
            mDisableCircularTransformation = disableCircularTransformation;
            initializeBitmap();
        }
    
        @Override
        public void setImageBitmap(Bitmap bm) {
            super.setImageBitmap(bm);
            initializeBitmap();
        }
    
        @Override
        public void setImageDrawable(Drawable drawable) {
            super.setImageDrawable(drawable);
            initializeBitmap();
        }
    
        @Override
        public void setImageResource(@DrawableRes int resId) {
            super.setImageResource(resId);
            initializeBitmap();
        }
    
        @Override
        public void setImageURI(Uri uri) {
            super.setImageURI(uri);
            initializeBitmap();
        }
    
        @Override
        public void setColorFilter(ColorFilter cf) {
            if (cf == mColorFilter) {
                return;
            }
    
            mColorFilter = cf;
            applyColorFilter();
            invalidate();
        }
    
        @Override
        public ColorFilter getColorFilter() {
            return mColorFilter;
        }
    
        private void applyColorFilter() {
            if (mBitmapPaint != null) {
                mBitmapPaint.setColorFilter(mColorFilter);
            }
        }
    
        private Bitmap getBitmapFromDrawable(Drawable drawable) {
            if (drawable == null) {
                return null;
            }
    
            if (drawable instanceof BitmapDrawable) {
                return ((BitmapDrawable) drawable).getBitmap();
            }
    
            try {
                Bitmap bitmap;
    
                if (drawable instanceof ColorDrawable) {
                    bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG);
                } else {
                    bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG);
                }
    
                Canvas canvas = new Canvas(bitmap);
                drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
                drawable.draw(canvas);
                return bitmap;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        private void initializeBitmap() {
            if (mDisableCircularTransformation) {
                mBitmap = null;
            } else {
                mBitmap = getBitmapFromDrawable(getDrawable());
            }
            setup();
        }
    
        private void setup() {
            if (!mReady) {
                mSetupPending = true;
                return;
            }
    
            if (getWidth() == 0 && getHeight() == 0) {
                return;
            }
    
            if (mBitmap == null) {
                invalidate();
                return;
            }
    
            mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    
            mBitmapPaint.setAntiAlias(true);
            mBitmapPaint.setShader(mBitmapShader);
    
            mBorderPaint.setStyle(Paint.Style.STROKE);
            mBorderPaint.setAntiAlias(true);
            mBorderPaint.setColor(mBorderColor);
            mBorderPaint.setStrokeWidth(mBorderWidth);
    
            mFillPaint.setStyle(Paint.Style.FILL);
            mFillPaint.setAntiAlias(true);
            mFillPaint.setColor(mFillColor);
    
            mBitmapHeight = mBitmap.getHeight();
            mBitmapWidth = mBitmap.getWidth();
    
            mBorderRect.set(calculateBounds());
            mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f);
    
            mDrawableRect.set(mBorderRect);
            if (!mBorderOverlay && mBorderWidth > 0) {
                mDrawableRect.inset(mBorderWidth - 1.0f, mBorderWidth - 1.0f);
            }
            mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f);
    
            applyColorFilter();
            updateShaderMatrix();
            invalidate();
        }
    
        private RectF calculateBounds() {
            int availableWidth  = getWidth() - getPaddingLeft() - getPaddingRight();
            int availableHeight = getHeight() - getPaddingTop() - getPaddingBottom();
    
            int sideLength = Math.min(availableWidth, availableHeight);
    
            float left = getPaddingLeft() + (availableWidth - sideLength) / 2f;
            float top = getPaddingTop() + (availableHeight - sideLength) / 2f;
    
            return new RectF(left, top, left + sideLength, top + sideLength);
        }
    
        private void updateShaderMatrix() {
            float scale;
            float dx = 0;
            float dy = 0;
    
            mShaderMatrix.set(null);
    
            if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) {
                scale = mDrawableRect.height() / (float) mBitmapHeight;
                dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f;
            } else {
                scale = mDrawableRect.width() / (float) mBitmapWidth;
                dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f;
            }
    
            mShaderMatrix.setScale(scale, scale);
            mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top);
    
            mBitmapShader.setLocalMatrix(mShaderMatrix);
        }
    
    }
    

    2.在res/value下新建att.xml(内容如下)

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="CircleImageView">
            <attr name="civ_border_width" format="dimension" />
            <attr name="civ_border_color" format="color" />
            <attr name="civ_border_overlay" format="boolean" />
            <attr name="civ_fill_color" format="color" />
        </declare-styleable>
    </resources>
    

    然后使用就和普通控件一样:

    <com.example.myapplication.CircleImageView
        android:layout_width="160dp"
        android:layout_height="160dp"
        android:layout_centerInParent="true"
        android:src="@drawable/head"
        app:civ_border_width="2dp"
        app:civ_border_color="@color/colorAccent"
        tools:ignore="MissingConstraints" />
    

    初始使用用法,更多设置做完开发再补上;

    代码很多参考了很多大佬的写法,再次不一一列出,侵删

    展开全文
  • 安卓音乐带图片圆形进度
  • 安卓圆形头像,可选择任意图片.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓绘制圆形图片

    2016-05-14 15:38:16
    安卓开发中,经常会...今天就讲一下如何将矩形图片绘制成圆形。 这里我们就用到了安卓中在xml里会使用到的属性,shape,定义一个xml文件 然后将此资源文件应用为当前图片的背景即可。下面开始上代码: <shape xmln

    在安卓开发中,经常会使用图片资源,然而有时UI给我们的图片不会是我们恰好需要的,这时候就需要我们对这些图片进行一些处理。今天就讲一下如何将矩形图片绘制成圆形。
    这里我们就用到了安卓中在xml里会使用到的属性,shape,定义一个xml文件 然后将此资源文件应用为当前图片的背景即可。下面开始上代码:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
    <solid android:color="@color/bg_control_center_switch" />
        <padding android:bottom="10dp"
            android:top="10dp"
            android:left="10dp"
            android:right="10dp" />
    </shape>

    可以看到shape=“oval”这个属性代表的就是椭圆。还可设置为矩形(rectangle),线形(line),环形(ring)
    再来看一下其他两个属性,solid和padding。solid是填充的意思,其颜色也就是图片背景的颜色,padding就是内边距,很好理解。
    今天就介绍到这边,写的很少

    展开全文
  • 安卓圆形头像,可选择任意图片 蛮不错的 现在分享一下给大家!
  • 安卓自定义圆形图片

    2017-03-04 21:50:56
    开发中经常要用到圆形头像,怎么快速实现呢? 用picasso框架配合一个工具类(代码如下:) public class MainActivity extends AppCompatActivity { private ImageView iv; @Override protected void onCreate...

    开发中经常要用到圆形头像,怎么快速实现呢?

    用picasso框架配合一个工具类(代码如下:)

    public class MainActivity extends AppCompatActivity {
    
        private ImageView iv;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iv = (ImageView) findViewById(R.id.iv);
            Picasso.with(this).load("http://img1.touxiang.cn/uploads/20120522/22-090423_51.jpg").transform(new Transformation() {
                @Override
                public Bitmap transform(Bitmap source) {//下载以后的内存中的bitmap对象
                    //压缩处理(60px*60px)
                    Bitmap bitmap = BitmapUtils.zoom(source, 60, 60);
                    //圆形绘制
                    bitmap = BitmapUtils.circleBitmap(source);
                    //释放资源
                    source.recycle();
                    return bitmap;
                }
    
                @Override
                public String key() {
                    //这里不能返回null
                    return "";
                }
            }).into(iv);
        }
    }
    工具类:

    public class BitmapUtils {
    
        public static Bitmap circleBitmap(Bitmap source){
            //默认只对宽进行处理
            int width=source.getWidth();
            Bitmap bitmap=Bitmap.createBitmap(width,width,Bitmap.Config.ARGB_8888);
            Canvas canvas=new Canvas(bitmap);
            Paint paint=new Paint();
            //设置抗锯齿
            paint.setAntiAlias(true);
            canvas.drawCircle(width/2,width/2,width/2,paint);
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
            canvas.drawBitmap(source,0,0,paint);
            return bitmap;
        }
    
        /**
         * 注意width、height参数的类型必须是float
         * */
        public static Bitmap zoom(Bitmap source,float width,float height){
            Matrix matrix=new Matrix();
            //图片进行压缩处理
            matrix.postScale(width/source.getWidth(),height/source.getHeight());
            Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, false);
            return bitmap;
        }
    }
    如此,便完成了自定义圆形头像的设置啦!(别忘记添加网络权限咯)

    展开全文
  • 方形图片通过遮罩处理,显示成圆形图片
  • 安卓实现圆形图片

    2016-06-07 19:26:54
    继承与View ... import android.content.Context; import android.content.res.TypedArray;...import android.graphics.Bitmap;...import android.graphics.BitmapFactory;...实现圆形图片就是这么简单。
  • 火山安卓圆角和圆形图片框,本源码详细介绍了火山安卓如何使用圆角功能和圆形图片框,学习本源码可以有效的了解火山安卓的圆角运行机制,本源码由利快云整理上传
  • 安卓根据xfermode实现圆形,圆角图片的生成。代码亲测有效。
  • 用自定义的类开实现图片的圆形显示,只需要将该导入包中,然后在布局文件中定义该类的控件即可运用,显示的效果是一个圆形图片
  • 安卓圆形图片的实现 1.加载网络图片时,可以使用 xUtils 框架 ImageManager m = x.image(); ImageOptions.Builder builder = new ImageOptions.Builder(); builder.setCircular(true);// 设置圆形属性 ...
  • public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888
  • 安卓开发中好多地方地方会显示图片的布局,而且还是圆形图片,查过资料后实现了该功能,代码中有布局文件和java文件,只需要在自己的代码中添加这部分代码就可以实现。
  • 安卓圆形图像

    千次阅读 2016-03-30 14:42:52
    那就是圆形图像,做图像的时候,我就会遇见,还有一些显示图片的时候 废话不说,直接代码。 新建一个类,我们取名字叫做:CircularImage.javapackage com.ooyuan.myview;import android.conte
  • 本demo系列文章只提供代码,以便于直接使用 参考博客
  • 话说这universalimageloader加载图片对搞过2年安卓程序都是用烂了再熟悉不过了,就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimageloader呢。一是因为这个东西确实是一个很不错的...
  • 圆形图片的工具类

    2018-05-29 15:59:59
    安卓圆形图片的一个工具类,可以直接使用。如果做安卓的不会圆形头像可以采用这个工具类
  • 圆形图片的实现.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 安卓圆形imageview笔记

    2016-12-24 15:50:53
    自定圆形图片CircleImageView总是用到,可是却没有仔细看过它的代码,所以今天就看下代码并做好注解,以备能理解其具体的工作原理。 首先是自定义view中方法的调用顺序:setImageDrawable()-->initializeBitmap()--...
  • * 绘制圆形图片 */ @Override protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (null != drawable) { Bitmap originalBitmap = ((BitmapDrawable) drawable).getBitmap(); ...
  • 前言 话说这universalimageloader载入图片对搞过2年安卓程序都是用烂了再熟悉只是了。就是安卓新手也是百度就会有...第二让我们用imageloader来学习 载入圆形圆角图片。三呢以后项目中可能用到了直接copy。 GITHUB...
  • 安卓圆形头像的画法

    2017-12-18 17:42:54
    图片圆形加载出来: package com.example.kasumi.a20171218; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android...
  • 用法:设置两张图片相交时的模式 例子: mPaint = newPaint(); mPaint.setXfermode( newPorterDuffXfermode(PorterDuff.Mode.SCREEN)); 常见的Xfermode(SRC为原图,DST为目标图),把代码中的SRC_IN换...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 164
精华内容 65
关键字:

安卓圆形图片