Android Create ImageView с 3 закругленными и 1 прямым углом - PullRequest
1 голос
/ 03 июня 2019

Я хочу создать вид изображения с 3 закругленными и одним прямым углом.

Настройка рисования фона не работает, и я нашел некоторый код Java, но он только закругляет 2 угла или 4, а не 3

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);

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

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

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

return output;

The resultant image should be as attached

Ответы [ 3 ]

1 голос
/ 03 июня 2019

Создайте новый файл ресурсов для рисования в файле для рисования и установите фон для файла для рисования.

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<!-- set the transparent background to image view -->
    <solid android:color="#00000000" />

<!-- Replace the corner value with suitable value -->
    <corners android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="0dp" />
</shape>

И примените соответствующий атрибут scaletype в файле XML.

  1. CENTER- Центрируйте изображение, но не масштабируйте изображение
  2. CENTER_CROP - Масштабируйте изображение равномерно
  3. CENTER_INSIDE - Центрируйте изображение внутри контейнера
  4. FIT_CENTER- Масштабировать изображение от центра
  5. FIT_END - Масштабировать изображение с конца контейнера.
  6. FIT_START - масштабировать изображение от начала контейнера
  7. FIT_XY - заполнить изображение по координатам x и y контейнера
  8. MATRIX - масштабиспользование матрицы изображения при рисовании
1 голос
/ 05 июня 2019

Есть хорошо написанные библиотеки, так что вы можете обрезать изображение по любому желаемому пути, но вот код:

private Bitmap clip(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
            .getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final Paint paint = new Paint();
    paint.setAntiAlias(true);


    // creating a closing path with 3 rounded corners
    Path path = new Path();
    float radius = 48;
    float diameter = radius * 2;
    float width = bitmap.getWidth();
    float height = bitmap.getHeight();
    path.addArc(0, 0, diameter, diameter, 180, 90);
    path.lineTo(width - radius, 0);
    path.arcTo(width - diameter, 0, width, diameter, 270, 90, false);
    path.lineTo(width, height);
    path.lineTo(radius, height);
    path.arcTo(0, height - diameter, diameter, height, 90, 90, false);
    path.close();


    paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
    canvas.drawPath(path, paint);

    return output;

}
0 голосов
/ 03 июня 2019

Используйте приведенный ниже код в файле Drawable @ background.xml.внутри

 <corners android:topLeftRadius="6dp" 
      android:topRightRadius="6dp"
      android:bottomLeftRadius="6dp" 
      android:bottomRightRadius="0dp"/>

Затем используйте в качестве фона для Imageview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...