このようなImageViewを作成したい(画像の右側):
CardViewレイアウトでそれを持っているので、カードの角を丸めましたが、画像の左下隅だけを(または右上で)丸める必要があります。
私はいくつかのオプションを試しましたが、何も正しく動作しません。
これどうやってするの?ヒントはありますか?
Material Components Library を使用できます。
バージョンあり1.2.0-alpha03
新しいShapeableImageView
があります。
レイアウトで使用するだけです:
<com.google.Android.material.imageview.ShapeableImageView
app:srcCompat="@drawable/..."
../>
そして、あなたのコードでShapeAppearanceModel
を次のように適用します:
float radius = getResources().getDimension(R.dimen.default_corner_radius);
imageView.setShapeAppearanceModel(imageView.getShapeAppearanceModel()
.toBuilder()
.setTopRightCorner(CornerFamily.ROUNDED,radius)
.setBottomLeftCorner(CornerFamily.ROUNDED,radius)
.build());
これを試して :
<androidx.cardview.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_margin="16dp"
app:cardCornerRadius="20dp">
<ImageView
Android:id="@+id/image_view"
Android:layout_width="150dp"
Android:layout_height="150dp"
Android:layout_gravity="top|right"
Android:scaleType="fitXY"
Android:src="@drawable/person" />
</androidx.cardview.widget.CardView>
そしてあなたの活動で:
ImageView image = findViewById(R.id.image_view);
Bitmap bitImg = BitmapFactory.decodeResource(getResources(),
R.drawable.person);
image.setImageBitmap(createRoundedRectBitmap(bitImg, 0, 20, 0, 20));
}
private static Bitmap createRoundedRectBitmap(@NonNull Bitmap bitmap, float topLeftCorner, float topRightCorner, float bottomRightCorner,
float bottomLeftCorner) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = Color.WHITE;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
Path path = new Path();
float[] radii = new float[]{
topLeftCorner, bottomLeftCorner,
topRightCorner, topRightCorner,
bottomRightCorner, bottomRightCorner,
bottomLeftCorner, bottomLeftCorner
};
Paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
Paint.setColor(color);
path.addRoundRect(rectF, radii, Path.Direction.CW);
canvas.drawPath(path, Paint);
Paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, Paint);
return output;
}
これは単純で、ドローアブルリソースファイルを作成するだけですtext_logo_fix.xml
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="#fff"/>
<corners Android:bottomLeftRadius="30dp" Android:topRightRadius="30dp"/>
</shape>
この描画可能ファイルをImageViewプロパティAndroid:background
に設定します
<ImageView
Android:id="@+id/imageView"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:background="@drawable/herenamedrawableresourcefile"
Android:layout_gravity="center_horizontal"
Android:src="@drawable/text_logo_fix" />
またはあなたはこのように見えることができます
<LinearLayout
Android:padding="10dp"
Android:layout_marginTop="20dp"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/herenamedrawableresourcefile">
<ImageView
Android:id="@+id/imageView"
Android:layout_width="100dp"
Android:layout_height="100dp"
Android:layout_gravity="center_horizontal"
Android:src="@drawable/text_logo_fix" />
</LinearLayout>