Метод 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 рассматривает их как арифметику.
Если вы поместите отступы = 1 и цвет фона в LinearLayout, у вас будет желтая рамка 1px.
Если изображения имеют переменный размер, вы всегда получите такой эффект. Я предполагаю, что вам нужно установить фиксированный размер для 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 пикселей и различную высоту.
Это не обрабатывает изображения с прозрачным фоном, так как тогда (в этом случае) желто-зеленый цвет просвечивает. Вы можете решить эту проблему, обернув каждый ImageView в FrameLayout. Создание черного цвета фона ImageView и установка FrameLayout на WrapContent с требуемым заполнением (я думаю)
Вот что сработало для меня ...
<!-- @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"/>
Вот результат, который я получаю с помощью пейджера и просмотра изображений с рамкой.
Вы можете использовать пользовательский вид изображения, откуда вы можете получить границу, вот код. Вы также можете изменить ширину отступов и ширину обводки в соответствии с вашими потребностями. Это указать чуть ниже первой строки кода, спасибо
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);
}
}
просто добавьте нижнюю строку в макет вашего ImageView
, если layout_width и layout_height для imageview не соответствует match_parent, чем использовать,
android:adjustViewBounds = "true"
или
android:adjustViewBounds = "true"
android:scaleType="fitXY"
или
android:adjustViewBounds = "true"
android:scaleType="centerCrop"
Вот что сработало для меня:
<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"/>
Просто добавьте свойство 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».
Вы должны добавить scaletyle в ваше изображение. После этого ваше изображение будет в форме.
Android: scaleType = "fitXY"
Ниже приведен фрагмент кода, который я использовал в своем простейшем решении.
<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>
Если вы хотите получить дополнительное объяснение, пожалуйста, посмотрите следующую ссылку , где я объяснил это достаточно хорошо.
Надеюсь, что это может быть полезно для всех, кто там!
Ура!