25

ListViewあり、サーバーからフェッチされた後ImageView、の画像が動的に読み込まれます。ImageViewさて、これらの画像を任意のサイズで円形のフレームに収めたいのですが、どうすればよいですか?これが私が欲しいもののサンプル写真です

ここに画像の説明を入力してください

4

7 に答える 7

24

以前の答えの助けを借りて、私はこの解決策を思いつきました。それが他の人を助けることを願っています:

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.widget.ImageView;



public class CircleImage extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.circle_layout);
    ImageView img1 = (ImageView) findViewById(R.id.imageView1);
    Bitmap bm = BitmapFactory.decodeResource(getResources(),
            R.drawable.hair_four);
    Bitmap resized = Bitmap.createScaledBitmap(bm, 100, 100, true);
    Bitmap conv_bm = getRoundedRectBitmap(resized, 100);
    img1.setImageBitmap(conv_bm);
    // TODO Auto-generated method stub
}

public static Bitmap getRoundedRectBitmap(Bitmap bitmap, int pixels) {
    Bitmap result = null;
    try {
        result = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(result);

        int color = 0xff424242;
        Paint paint = new Paint();
        Rect rect = new Rect(0, 0, 200, 200);

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawCircle(50, 50, 50, paint);
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

    } catch (NullPointerException e) {
    } catch (OutOfMemoryError o) {
    }
    return result;
}

 }
于 2012-12-27T08:13:31.473 に答える
9

このコードを試してください:

public static Bitmap getRoundedRectBitmap(Bitmap bitmap, int pixels) {
try {
result = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
Bitmap.Config.ARGB_8888);
canvas = new Canvas(result);

color = 0xff424242;
paint = new Paint();
rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
rectF = new RectF(rect);
roundPx = pixels;

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);
} catch (NullPointerException e) {
// return bitmap;
} catch (OutOfMemoryError o){}
return result;
}

実際の円が必要な場合は100px、パラメータとして渡すことができます。

于 2012-12-27T07:13:07.100 に答える
8

アップデート

CircleImageViewGithubで利用可能です。

Gradle依存関係として追加すると、Mavenリポジトリから最新バージョンを取得できます。

于 2012-12-27T07:41:44.527 に答える
4

これに関するチュートリアルはたくさんあります。私はそれが役立つと思います。

https://github.com/lopspower/CircularImageView

https://github.com/wisemandesigns/CircularImageView

https://coderwall.com/p/hmzf4w

于 2014-08-25T07:39:59.757 に答える
1

xmlコードから画像の高さと幅を管理し、Javaコードから円/楕円を描くことができます。

    <ImageView
            android:id="@+id/imageView1"
            android:layout_width="@dimen/width"
            android:layout_height="@dimen/height"
            />

楕円形のビューの場合

ImageView img1 = (ImageView) findViewById(R.id.imageView1);
Bitmap bm = BitmapFactory.decodeResource(getResources(),
        R.drawable.user_image);
Bitmap conv_bm = getRoundedBitmap(bm);
img1.setImageBitmap(conv_bm);


public static Bitmap getRoundedBitmap(Bitmap bitmap)
{
    final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(output);

    final int color = Color.RED;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawOval(rectF, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    bitmap.recycle();

    return output;
  }

 }
于 2015-06-12T11:13:11.137 に答える
0

次の依存関係を追加します

 implementation 'jp.wasabeef:picasso-transformations:2.2.1'
 implementation 'de.hdodenhof:circleimageview:3.0.0'

CircularImageViewは、画像が適切に表示されていない場合にも、画像を円に収めるために使用できます。resizeは、円形画像ビューでの画像のサイズ変更用です。

    CircleImageView img;
    String Imageid; 

    Imageid="ImageName"; //String is not compulsary it may be drawable  

    Picasso.with(mContext)
            .load(Imageid.get(position)) //Load the image
            .error(R.drawable.ic_launcher_background) //Image resource for error
            .resize(20, 20)  // Post processing - Resizing the image
            .into(img); // View where image is loaded.
于 2020-01-18T09:15:23.940 に答える
-1
 public static Bitmap getCircleBitmap(Bitmap bitmap) {
        final Bitmap circuleBitmap = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getWidth(), Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(circuleBitmap);

        final int color = Color.RED;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getWidth());
        final RectF rectF = new RectF(rect);

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

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

        bitmap.recycle();

        return circuleBitmap;
    }
于 2016-05-09T11:27:52.583 に答える