Вы должны установить R.drawable.style
в качестве фона. Затем добавьте дополнение к вашему ImageView
. Смотрите код:
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(bmp);
imageView.setLayoutParams(params);
imageView.setBackgroundResource(R.drawable.style);
imageView.setPadding(2,2,2,2); // <- try out different values
Примечание: Если изображение (bmp
) является квадратом, то граница будет появляться совершенно вокруг изображения. Если изображение не является квадратом, то площадь границы (в зеленой) появится вокруг изображения, а остальное пространство будет заполнено черным цветом, как показано ниже:
Однако, если вы не хочу этот эффект, а вы хотите, чтобы растянуть изображение, чтобы заполнить границы, (без черного пространства), а затем обновить свой код следующим образом:
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(bmp);
imageView.setLayoutParams(params);
imageView.setBackgroundResource(R.drawable.main_header_selector);
imageView.setPadding(2, 2, 2, 2);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); // <- set the scale
imageView.setCropToPadding(true); // <- requires API 16 or more
Это будет иметь эффект, как показано ниже:
Примечание: (1) Я использовал зеленую рамку для демонстрационных целей. (2) Размер границы может быть увеличена за счет изменения android:top,left,right,bottom
значения в вашем style.xml
UPDATE: Другой метод, как граница может быть применен к изображению является расширение BitmapDrawable
, а затем рисунок таможенной границы прямоугольника. Объявляет class
следующим образом:
public class BorderDrawable extends BitmapDrawable {
private static final int BORDER_WIDTH = 10;
private final int[] GRADIENT_COLORS = {Color.BLUE, Color.GREEN, Color.RED};
Paint borderPaint;
public BorderDrawable(Resources res, Bitmap bitmap) {
super(res, bitmap);
this.borderPaint = new Paint();
borderPaint.setStrokeWidth(BORDER_WIDTH);
borderPaint.setStyle(Paint.Style.STROKE);
// set border gradient
Shader shader = new LinearGradient(0, 0, 0, getBounds().bottom, GRADIENT_COLORS, null, Shader.TileMode.CLAMP);
borderPaint.setShader(shader);
// or the border color
// borderPaint.setColor(Color.GREEN);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// draw
canvas.drawRect(getBounds(), borderPaint);
}
}
использование его следующим образом:
BorderDrawable drawable = new BorderDrawable(getResources(), bmp);
imageView.setImageDrawable(drawable);
, приведенный выше класс может быть изменен в соответствии с вашими потребностями:
1) BORDER_WIDTH
значение определяет толщину граница в пикселях.
2) GRADIENT_COLORS
цвета определяют цвета, используемые для градиента на границе. Измените их на основе ваших значений, таких как image_border_start
и т. Д.
Выход будет идеальной границей, независимо от размера изображения.
Я обновил свой ответ, чтобы включить другой метод, который можно использовать. Пожалуйста, посмотрите и дайте мне знать, если это сработает. –