#android #android-view #android-relativelayout
#Android #android-просмотр #android-relativelayout
Вопрос:
Пытаясь найти решение для нужного мне макета, я наткнулся на методы setScaleX / setScaleY, которые являются членами класса View.
Теперь, глядя на методы RelativeLayout и фильтрации по API уровня 8, поскольку я разрабатываю приложение для > = 2.2, указанные методы исчезают. Но при просмотре «Унаследованных атрибутов XML от класса android.view.View» свойства android: scaleX / android: scaleY все еще доступны. К сожалению, попытка использовать эти свойства не работает, и Eclipse сообщает: «ошибка: не найден идентификатор ресурса для атрибута ‘scaleX’ в пакете ‘android'»
Похоже, документация противоречива, и scaleX / scaleY недоступны до версии 3.0, или я что-то упускаю?
Ответ №1:
Я столкнулся с аналогичной проблемой, когда попытался задать представление с начальным значением scaleX перед воспроизведением каких-либо анимаций, однако view.setScaleX() с 11-го уровня API соответствует @Dr .J .
Если вы хотите использовать Honeycomb Animation API на более ранних уровнях API, попробуйте использовать NineOldAndroids на http://nineoldandroids.com . На основе этой библиотеки с открытым исходным кодом существует обходной путь для предоставления виду начального scaleX.
ObjectAnimator.ofFloat(getMyButton(), "scaleX", 1f, 0f).setDuration(1).start();
Комментарии:
1. Блестящая идея, я бы дал вам еще 5 1, если бы мог. Спасибо.
Ответ №2:
Хорошо, похоже, что это неверное представление в документах, как это объясняется здесь scaleX / scaleY — это свойства, добавленные в класс View с помощью Honeycomb и поэтому, к сожалению, недоступные в Froyo.
Комментарии:
1. scaleX и scaleY по этой ссылке не обсуждаются.
Ответ №3:
нет, документы верны:
общедоступный недействительный setScaleX (float scaleX) Начиная с: Уровень API 11
Froyo — это API 8-го уровня.
Комментарии:
1. Да, методы будут скрыты при выборе любого уровня API ниже 11. Но унаследованные атрибуты XML из класса android.view. Просмотр не будет, так что атрибуты все еще там, как вы можете видеть в документе RelativeLayout, кстати. Froyo 8-го уровня
2. да, но он ищет ресурс scaleX, которым в данном случае будет дескриптор setScaleX, который недоступен (как установлено во время целевой сборки). Я полагаю, ваша цель сборки — 2.2? если это 3.0 и выдает вам эту ошибку, то это ошибка.
3. Я думаю, что мы забываем друг о друге 😉 Моя цель сборки — 2.2, и я не могу использовать ни методы, ни атрибуты xml для масштабирования. Меня смутила документация, поскольку в ней говорится, что методы недоступны, но атрибуты xml доступны. Это то, что я хотел знать. Итак, я бы сказал, что «ошибка» есть в документации…
4. документация немного неубедительна в определенных местах, в ней говорится
android:scaleX Since: API Level
о том, что это за API: X
Ответ №4:
NineOldAndroid
устарел согласно ссылке на github NineOldAndroid
Используйте Android Support library
вместо NineOldAndroid
итак, вы должны использовать ViewCompat
вместо ViewHelper
просто измените:
view.setScaleX(2);
или
ViewHelper.setScaleX(view,2);
Для:
ViewCompat.setScaleX(view,2);
надеюсь, это поможет
Ответ №5:
Используйте com.nineoldandroids.view.ViewHelper
для более старых API:
ViewHelper.setScaleY(myButton, 0.01f);
Ответ №6:
Для всех, кому интересно: я увеличиваю масштаб только до центра холста, и этот код работает для меня:
public float[] getAbsolutePosition(float Ax, float Ay) {
float fromAxToBxInCanvasSpace = (screenwidth/2 - Ax) / zoomLevel;
float fromBxToCanvasEdge = screenwidth/2;
float x = screenwidth - fromAxToBxInCanvasSpace - fromBxToCanvasEdge;
float fromAyToByInCanvasSpace = (screenheight/2 - Ay) / zoomLevel;
float fromByToCanvasEdge = screenheight/2;
float y = screenheight - fromAyToByInCanvasSpace - fromByToCanvasEdge;
return new float[] { x, y };
}