Android - установите границу вокруг ImageView

Метод seq является самым простым, но у Bash есть встроенная арифметическая оценка.

END=5
for ((i=1;i<=END;i++)); do
    echo $i
done
# ==> outputs 1 2 3 4 5 on separate lines

Конструкция for ((expr1;expr2;expr3)); работает так же, как for (expr1;expr2;expr3) на C и подобных языках, и нравится других ((expr)) случаях, Bash рассматривает их как арифметику.

29
задан Andy Res 24 September 2012 в 20:20
поделиться

9 ответов

Если вы поместите отступы = 1 и цвет фона в LinearLayout, у вас будет желтая рамка 1px.

46
ответ дан Christine 24 September 2012 в 20:20
поделиться

Если изображения имеют переменный размер, вы всегда получите такой эффект. Я предполагаю, что вам нужно установить фиксированный размер для ImageView и дать ему заданный цвет фона - с точки зрения вашего примера черный будет иметь смысл. Оберните вид изображения в FrameLayout или просто вид с желтым фоном и отступом 1px.

РЕДАКТИРОВАТЬ


Я подумал об этом, и мой ответ не был правильным, так что ...

Если вы установите для каждого ImageView фиксированный размер, отступы и поля. а затем, при необходимости, установите цвет фона, чтобы получить желаемый эффект.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent" >


        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#52D017"
            android:padding="1dp"
            android:layout_margin="5dp"
            android:src="@drawable/test1"
            tools:ignore="ContentDescription" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="5dp"
            android:background="#52D017"
            android:padding="1dp"
            android:src="@drawable/test2"
            tools:ignore="ContentDescription" />

</LinearLayout>

На снимке экрана оба отображаемых изображения имеют ширину менее 100 пикселей и различную высоту.

example

Это не обрабатывает изображения с прозрачным фоном, так как тогда (в этом случае) желто-зеленый цвет просвечивает. Вы можете решить эту проблему, обернув каждый ImageView в FrameLayout. Создание черного цвета фона ImageView и установка FrameLayout на WrapContent с требуемым заполнением (я думаю)

9
ответ дан Paul D'Ambra 24 September 2012 в 20:20
поделиться

Вот что сработало для меня ...

<!-- @drawable/image_border -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="@color/colorPrimary"/>
  <stroke android:width="1dp" android:color="#000000"/>
  <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp"/>
</shape>

<ImageView
  android:layout_width="300dp"
  android:layout_height="300dp"
  android:layout_gravity="center"
  android:padding="1dp"
  android:cropToPadding="true"
  android:scaleType="centerCrop"
  android:background="@drawable/image_border"/>

Вот результат, который я получаю с помощью пейджера и просмотра изображений с рамкой.

Example imageview with border 1dp black.

26
ответ дан Ray Hunter 24 September 2012 в 20:20
поделиться

Вы можете использовать пользовательский вид изображения, откуда вы можете получить границу, вот код. Вы также можете изменить ширину отступов и ширину обводки в соответствии с вашими потребностями. Это указать чуть ниже первой строки кода, спасибо

public class FreeCollage extends ImageView {

    private static final int PADDING = 8;
    private static final float STROKE_WIDTH = 5.0f;

    private Paint mBorderPaint;

    public FreeCollage(Context context) {
        this(context, null);
    }

    public FreeCollage(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        setPadding(PADDING, PADDING, PADDING, PADDING);
    }

    public FreeCollage(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initBorderPaint();
    }

    private void initBorderPaint() {
        mBorderPaint = new Paint();
        mBorderPaint.setAntiAlias(true);
        mBorderPaint.setStyle(Paint.Style.STROKE);
        mBorderPaint.setColor(Color.WHITE);
        mBorderPaint.setStrokeWidth(STROKE_WIDTH);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(PADDING, PADDING, getWidth() - PADDING, getHeight() - PADDING, mBorderPaint);
    }
}
4
ответ дан Shubham Kamlapuri 24 September 2012 в 20:20
поделиться

просто добавьте нижнюю строку в макет вашего ImageView

, если layout_width и layout_height для imageview не соответствует match_parent, чем использовать,

android:adjustViewBounds = "true"

или

android:adjustViewBounds = "true"
android:scaleType="fitXY"

или

android:adjustViewBounds = "true"
android:scaleType="centerCrop"
1
ответ дан varotariya vajsi 24 September 2012 в 20:20
поделиться

Вот что сработало для меня:

    <ImageView
        android:id="@+id/dialpad_phone_country_flag"
        android:layout_width="22dp"
        android:layout_height="15dp"
        android:scaleType="fitXY"
        android:background="@color/gen_black"
        android:padding="1px"/>
3
ответ дан Goran Horia Mihail 24 September 2012 в 20:20
поделиться

Просто добавьте свойство AdjustViewBounds в ImageView.

<ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/image_border"
        android:padding="1dp"
        android:adjustViewBounds="true"
        android:src="@drawable/test_image" />

Пожалуйста, обратите внимание, что android:adjustViewBounds="true" работает только с android:layout_width и android:layout_height, установленными в «wrap_content».

3
ответ дан Nicolas Tyler 24 September 2012 в 20:20
поделиться

Вы должны добавить scaletyle в ваше изображение. После этого ваше изображение будет в форме.

Android: scaleType = "fitXY"

0
ответ дан Shubham 24 September 2012 в 20:20
поделиться

Ниже приведен фрагмент кода, который я использовал в своем простейшем решении.

<FrameLayout
    android:layout_width="112dp"
    android:layout_height="112dp"
    android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
    android:layout_marginRight="16dp" <!-- May vary according to your needs -->
    android:layout_centerVertical="true">
    <!-- following imageView acts as the boarder which sitting in the background of our main container ImageView -->
    <ImageView
        android:layout_width="112dp"
        android:layout_height="112dp"
        android:background="#000"/>
    <!-- following imageView holds the image as the container to our image -->
    <!-- layout_margin defines the width of our boarder, here it's 1dp -->
    <ImageView
        android:layout_width="110dp"
        android:layout_height="110dp"
        android:layout_margin="1dp"
        android:id="@+id/itemImageThumbnailImgVw"
        android:src="@drawable/banana"
        android:background="#FFF"/>
</FrameLayout>

Если вы хотите получить дополнительное объяснение, пожалуйста, посмотрите следующую ссылку , где я объяснил это достаточно хорошо.

Надеюсь, что это может быть полезно для всех, кто там!

Ура!

0
ответ дан Community 24 September 2012 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: