7

サーバーから正方形の画像の URL を取得していますが、角を丸くする必要があります。実際にはボレー ライブラリを使用しています。ユニバーサル イメージ ローダーとピカソ ライブラリを使用して角の丸い画像を作成する方法を知っています。ボレー ライブラリで画像を設定しています。 setimageUrlのようなネットワークイメージビューで助けてください

 holder.ivImage.setImageUrl(url, imageLoader);
4

8 に答える 8

19

imageview を丸くするソース コードを見つけました (例: https://github.com/hdodenhof/CircleImageView )imageview を拡張していたので、 NetworkImageView を拡張するだけです。私にとってはすべてうまくいきます。上記の円形の画像ビューを使用したくない場合は、NetworkImageView クラスを拡張し、ニーズに合わせてカスタマイズする必要があります。

于 2015-05-05T13:36:03.793 に答える
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;
    }
}

XML

<com.example.own.CircularNetworkImageView
        android:id="@+id/image"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginRight="10dp"/>

使用法:

    CircularNetworkImageView image = (CircularNetworkImageView) view.findViewById(R.id.image);
    private ImageLoader netImageLoader=AppController.getInstance().getImageLoader();
    image.setImageUrl("imageurl", netImageLoader);
于 2016-02-04T09:59:28.617 に答える
3

CardView を使用できます。

<android.support.v7.widget.CardView 
    app:cardCornerRadius="@dimen/spacing_tiny">

    <com.android.volley.toolbox.NetworkImageView>
    ...
    />
</android.support.v7.widget.CardView>
于 2016-02-23T03:33:00.167 に答える
0

これが私がやった方法です:

  • ボレー ライブラリで、「NetworkImageView」というクラスをコピーし、「NetworkImageViewCircle」という名前を付けます。

    private void setAnimateImageBitmap(final Bitmap bitmap, boolean fadeIn) {
    
    final Bitmap bmp;
    
    bmp = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    BitmapShader shader = new BitmapShader(bitmap,
            BitmapShader.TileMode.CLAMP,
            BitmapShader.TileMode.CLAMP);
    
    float radius = Math.min(bitmap.getWidth(), bitmap.getHeight()) / 5;
    Canvas canvas = new Canvas(bmp);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(shader);
    
    RectF rect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
    canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint);
    .
    .
    .
    

これは私にとってトリックを作りました。それが役に立てば幸い。

于 2014-09-18T21:24:44.923 に答える
-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>

次に、レイヤーリストをドローアブルにして、ネットワークイメージビューの背景として配置します。

// 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>

ネットワークイメージビューの背景として配置します。

 <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" />

あなたはそのようなものを持っているでしょう。

ここに画像の説明を入力

于 2014-08-13T10:49:48.633 に答える