Ответ 1
Наконец, мне удалось реализовать требуемое поведение, используя настраиваемый вид галереи. Теперь он работает отлично.
Мое приложение использует стандартный андроид TranslateAnimation для слайд-шоу в и из экрана. К сожалению, макет кажется довольно тяжелым: ImageView, куча текстовых представлений и Галерея с текстом и изображениями в нем. Существует два вида анимации: один, который открывается, и другой, который скользит.
Проблема заключается в низкой производительности этих анимаций, особенно на устройствах с менее мощным процессором. Анимация не выглядит достаточно гладко.
Я думаю об удалении TranslateAnimations и попытке захватить содержимое представления в растровом изображении и переместить их как ImageViews.
Есть ли у вас какие-либо идеи о том, как такие задачи должны выполняться должным образом, и поможет ли подход к перемещению изображений?
P.S.
Я думаю, что я могу неправильно использовать анимацию. У меня есть два взгляда на FrameLayout. Один из них виден, другой - нет. Затем я обрабатываю события касания и применяю TranslateAnimations к обоим представлениям (в ACTION_MOVE), когда пользователь перемещает палец вдоль экрана. Таким образом, похоже, что пользователь перемещает один вид из экрана, вытягивая другой со стороны экрана. Он отлично работает для облегченных макетов.
Наконец, мне удалось реализовать требуемое поведение, используя настраиваемый вид галереи. Теперь он работает отлично.
Вам следует включить кеш чертежа в анимированных представлениях. Посмотрите документацию для View.setDrawingCacheEnabled(boolean).
Другим решением было бы сделать ваши представления на 3D-поверхности и оживить их через OpenGL. То, как Sony делает все свои отличные анимации, как видно, например, в приложении TimeScape.
Там сообщение в блоге об этом.
Вы должны попробовать использовать flipper. Его очень просто включить в него свои взгляды и использовать анимационные файлы для выполнения многочисленных анимаций. Эта ссылка может быть полезна:
Как вы реагируете на события касания, вы, вероятно, создаете новые TranslateAnimations в вашем методе onTouch, который запускается очень часто. Массовое создание новых экземпляров приводит к массивной сборке мусора.
2 решения:
Внедрите свой собственный StaticTranslateAnimation и не создавайте его для каждого события перемещения (например, setTranslation (int x, int y)). Даунсайд: этот подход работал у меня только для одной анимации. Анимация двух объектов за раз приводила к сбору мусора, хотя в процессе обработки событий объекты не были созданы (в моем коде).
Используйте offsetLeftAndRight (int offset) и offsetTopAndBottom (int offset) вместо анимаций, которые намного лучше работают на старых и Android 2.x устройствах и полностью избегают сбора мусора.