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);