如何使用volley库android创建圆角图像

sky*_*ine 7 android android-volley networkimageview

我从服务器获取方形的图像网址我必须使它成为圆角图像.实际上我正在使用排球库,我知道如何使用通用图像加载器和毕加索库创建圆角图像.在排球库我设置图像在网络imageview像setimageUrl请帮助我

 holder.ivImage.setImageUrl(url, imageLoader);
Run Code Online (Sandbox Code Playgroud)

Pra*_*war 19

我找到了一个使imageview圆形的源代码,例如https://github.com/hdodenhof/CircleImageView.这是扩展imageview,我只是使它扩展NetworkImageView.一切都对我很好.如果您不想使用上面的圆形图像视图,则必须扩展NetworkImageView类并进行自定义以满足您的需求.

  • 请注意,CircleImageView仅支持CENTER_CROP.我们无法改变它.它适用于个人资料图像,但如果您有任何其他要求,则无济于事. (2认同)

kat*_*hir 9

您需要扩展NetworkImageView类并创建自己的视图

Java:CircularNetworkImageView

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;


import com.android.volley.toolbox.NetworkImageView;



public class CircularNetworkImageView extends NetworkImageView {
    Context mContext;

    public CircularNetworkImageView(Context context) {
        super(context);
        mContext = context;
    }

    public CircularNetworkImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        mContext = context;
    }

    public CircularNetworkImageView(Context context, AttributeSet attrs,
                                    int defStyle) {
        super(context, attrs, defStyle);
        mContext = context;
    }

    @Override
    public void setImageBitmap(Bitmap bm) {
        if(bm==null) return;
        setImageDrawable(new BitmapDrawable(mContext.getResources(),
                getCircularBitmap(bm)));
    }

    /**
     * Creates a circular bitmap and uses whichever dimension is smaller to determine the width
     * <br/>Also constrains the circle to the leftmost part of the image
     *
     * @param bitmap
     * @return bitmap
     */
    public Bitmap getCircularBitmap(Bitmap bitmap) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        int width = bitmap.getWidth();
        if(bitmap.getWidth()>bitmap.getHeight())
            width = bitmap.getHeight();
        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, width, width);
        final RectF rectF = new RectF(rect);
        final float roundPx = width / 2;

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        return output;
    }
}
Run Code Online (Sandbox Code Playgroud)

XML

<com.example.own.CircularNetworkImageView
        android:id="@+id/image"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginRight="10dp"/>
Run Code Online (Sandbox Code Playgroud)

用法:

    CircularNetworkImageView image = (CircularNetworkImageView) view.findViewById(R.id.image);
    private ImageLoader netImageLoader=AppController.getInstance().getImageLoader();
    image.setImageUrl("imageurl", netImageLoader);
Run Code Online (Sandbox Code Playgroud)


Dee*_*hah -3

截击与圆角图像无关。

您可以制作一个带有白色边框和透明内容的简单圆圈。

// res/drawable/circle.xml

  <shape xmlns:android="http://schemas.android.com/apk/res/android"
         android:innerRadius="0dp"
         android:shape="ring"
         android:thicknessRatio="1.9"
         android:useLevel="false" >
  <solid android:color="@android:color/transparent" />

      <stroke
           android:width="10dp"
           android:color="@android:color/white" />
  </shape>
Run Code Online (Sandbox Code Playgroud)

然后制作一个可绘制的图层列表并将其作为网络图像视图的背景。

// res/drawable/img.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

   <item android:drawable="@drawable/ic_launcher"/>
   <item android:drawable="@drawable/circle"/>

</layer-list>
Run Code Online (Sandbox Code Playgroud)

并将其作为网络图像视图的背景。

 <com.android.volley.toolbox.NetworkImageView
    android:id="@+id/networkImageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:background="@drawable/img"
    android:src="@drawable/ic_launcher" />
Run Code Online (Sandbox Code Playgroud)

你会有类似的东西。

在此输入图像描述

  • 您将 ic_launcher.png 硬编码到 img.xm 中,我们需要对从网络下载的图像进行舍入 (3认同)