Должен ли я использовать LinearLayout с повторяющимся фоном или SVG ImageView, чтобы заполнить всю строку? - PullRequest
0 голосов
/ 10 апреля 2019

Связанные вопросы

Следующие вопросы не смогли окончательно решить мою проблему, описанную ниже.

Context

Я использую ConstraintLayout.Моя цель - показать SVG-изображение , которое содержит кнопку:

  1. Его ширина составляет 100% ширины экрана - ее необходимо повторить

  2. Его высота определяется как пространство между нижней стороной виджета и нижней стороной кнопки - его необходимо повторить

Проблема

Каждый раз, когда я пытался показать это изображение, чертеж был плохо масштабирован, плохо обрезан или размыт.

Например:

enter image description here

Это должно выглядеть так:

enter image description here

Многие тесты

  1. Я пыталсяиспользуйте ImageView с атрибутом src: я использовал каждый тип шкалы, с атрибутом и без атрибута, который позволяет установить пользовательское соотношение

  2. Я пытался использовать ImageView с фоном вместо src

  3. Я пытался использовать RelativeLayout с повторяющимся файлом фона, поэтому я не использовал изображение SVGно его версия JPEG, и даже этот способ привел к плохим результатам

  4. Примечание для 3: я действительно хотел бы использовать изображение SVG вместо растрового изображения, потому что оно будетбыть совместимым с резолюциями.

Мой вопрос

Итак, учитывая все эти объяснения ( cf.: part Context) и приведенные выше иллюстрации,как бы вы начали показывать это изображение?

1 Ответ

0 голосов
/ 12 апреля 2019

используйте код Java

    ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#888888")); // bg color
    Drawable vDrawable = AppCompatResources.getDrawable(this, R.drawable.ic_vector_star); // vector drawable
    if (vDrawable != null) {
        Bitmap bitmap = Bitmap.createBitmap(vDrawable.getIntrinsicWidth(), vDrawable.getIntrinsicHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        vDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        vDrawable.draw(canvas);
        BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
        bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); // set repeat

        LayerDrawable drawable = new LayerDrawable(new Drawable[]{colorDrawable, bitmapDrawable});
        findViewById(R.id.frameLayout).setBackground(drawable);
    }

example

...