サーバーから正方形の画像の URL を取得していますが、角を丸くする必要があります。実際にはボレー ライブラリを使用しています。ユニバーサル イメージ ローダーとピカソ ライブラリを使用して角の丸い画像を作成する方法を知っています。ボレー ライブラリで画像を設定しています。 setimageUrlのようなネットワークイメージビューで助けてください
holder.ivImage.setImageUrl(url, imageLoader);
サーバーから正方形の画像の URL を取得していますが、角を丸くする必要があります。実際にはボレー ライブラリを使用しています。ユニバーサル イメージ ローダーとピカソ ライブラリを使用して角の丸い画像を作成する方法を知っています。ボレー ライブラリで画像を設定しています。 setimageUrlのようなネットワークイメージビューで助けてください
holder.ivImage.setImageUrl(url, imageLoader);
imageview を丸くするソース コードを見つけました (例: https://github.com/hdodenhof/CircleImageView )。imageview を拡張していたので、 NetworkImageView を拡張するだけです。私にとってはすべてうまくいきます。上記の円形の画像ビューを使用したくない場合は、NetworkImageView クラスを拡張し、ニーズに合わせてカスタマイズする必要があります。
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);
CardView を使用できます。
<android.support.v7.widget.CardView
app:cardCornerRadius="@dimen/spacing_tiny">
<com.android.volley.toolbox.NetworkImageView>
...
/>
</android.support.v7.widget.CardView>
これが私がやった方法です:
ボレー ライブラリで、「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);
.
.
.
これは私にとってトリックを作りました。それが役に立てば幸い。
ボレーはラウンドコーナーのイメージとは何の関係もありません。
白い枠線と透明なコンテンツで形をした単純な円を作成できます。
// 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" />
あなたはそのようなものを持っているでしょう。