Android scaledrawable, похоже, не работает

Я пытаюсь использовать android ScaleDrawable

Но это не работает... Я создал xml, как в примере с документацией, и у меня есть логотип .png в папке с возможностью переноса

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />

Я сохранил это как logo2.xml в папке с возможностью переноса, тогда у меня есть LinearLayout с ImageView и установите src ImageView на "@drawable/logo2", но логотип не появляется... Я что-то делаю Неправильно здесь? Как вы на самом деле используете элемент масштаба?

Ответ 1

Только сегодня я столкнулся с той же проблемой. ScaleDrawable, похоже, не работает. После некоторого расследования я нашел решение:

Если вы посмотрите на документацию, вы можете найти эту фразу: "A Drawable, которая изменяет размер другого Drawable на основе его текущего значения уровня". Что это.

После того, как я обнаружил, что функция

Ответ 2

Используйте вкладку drawable, а не масштабируемую шкалу

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/logo"
    android:insetTop="2dp"
    android:insetLeft="2dp"  
    android:insetRight="2dp"
    android:insetBottom="2dp"
    >

Ответ 3

Чтобы ответить на начальный вопрос, вам просто нужно инициализировать свой ScaleDrawable Level с 10 000 в вашем onCreate. Вы получаете свой ImageView, ImageButton с помощью getIcon или getBackground (зависит, если вы установите его как источник или фон), а затем вызовите setLevel на нем. Для MenuItem код выглядит так:

    editMenuItem = menu.findItem(R.id.action_edit);
    menuItemEdit_ScaleDrawable = (ScaleDrawable) editMenuItem.getIcon();
    //when playing with scaleDrawable always initialize the level
    menuItemEdit_ScaleDrawable.setLevel(10000);

Я использую ScaleDrawable при запуске анимации, которая изменяет размер drawable. Для вашего использования, я определенно предпочитаю управлять размером компонента, а не выводимым компонентом.

Ответ 4

ScaleDrawable не только позволяет масштабировать выделение, но и позволяет управлять масштабом с помощью setLevel на самом ScaleDrawable. Но ScaleDrawable не изменяет внутреннюю ширину и высоту рисованного Как указывал @m039, источник ScaleDrawable действительно делает странную вещь: когда исходный уровень рисования установлен в 0, сам scaleDrawable не будет рисовать.

Чтобы вступить в силу масштаба, вам нужно сделать что-то вроде этого:

ScaleDrawable scaleDrawable = (ScaleDrawable) imageView.getDrawable();
scaleDrawable.setLevel(10000);
or 
scaleDrawable.setLevel(5000);