Медленное скользящее меню Android при использовании фоновых изображений

Я использую библиотеку скользящего меню из https://github.com/jfeinstein10/SlidingMenu. хорошо, за исключением одной маленькой вещи: когда я прикрепляю скользящее меню к действию, у которого есть изображение в качестве фона, оно начинает отставать. Когда я прокручиваю вправо или влево, меню отвечает на несколько секунд. Кто-нибудь видел это раньше? Любая помощь будет принята с благодарностью.

Я использую изображение в формате png размером около 650 КБ, но я также пытался использовать изображения низкого качества размером менее 20 КБ, но проблема осталась.

Мой минимальный SDK — 13, целевой SDK — 17 (я также пытался изменить эти значения, но это не помогло)

Это макет одного из моих действий, в котором используется скользящее меню:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@drawable/my_background"
  android:orientation="vertical" >

если я удалю значение android:background, меню скользит просто отлично


person Student    schedule 24.07.2013    source источник
comment
Это не ответ на ваш вопрос. Это альтернатива SlidingMenu. Android библиотека поддержки предоставляет аналогичный вызов виджета SlidingPaneLayout.   -  person Wenhui    schedule 24.07.2013
comment
У кого-нибудь есть решение этой проблемы   -  person Lakshmanan    schedule 13.05.2014


Ответы (2)


Вы должны добавить отдельное фоновое изображение для каждой папки с возможностью рисования (drawable-mdpi, drawable-hdpi, drawable-xhdpi и т. д.). Я протестировал только одно изображение в базовой папке с возможностью рисования, оно открывалось и закрывалось очень медленно и совсем не плавно. Если вы добавите фоновые изображения разных размеров во все доступные для рисования папки, это работает как шарм.

person neits    schedule 25.07.2014
comment
Ты мой герой! Скользящее меню вяло сводило меня с ума в течение месяца, я добавил все изображения в mdpi, hdpi и т. Д., Все работает правильно!, еще раз спасибо и +1 для вас! - person Haifeng Zhang; 21.10.2014

Если у кого-то (например, у меня) все еще есть проблема со скользящим меню и фоновым изображением, я попытаюсь объяснить, как я решаю эту проблему. Решение @netis мне не помогло. Как вы знаете, проблема исчезнет, ​​если вы не используете фон в меню слайдов, поэтому нам нужно использовать что-то другое вместо стандартного фона Android. Я использую TextureView для этого. В моем xml для меню я добавил:

<TextureView
    android:id="@+id/menu_texture_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

В коде активности при инициализации меню добавлено:

final TextureView texture = (TextureView) menuView.findViewById(R.id.menu_texture_view);

    final Drawable picture = getResources().getDrawable(R.drawable.menu_background);

    texture.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
            Canvas canvas = texture.lockCanvas();
            picture.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
            picture.draw(canvas);
            texture.unlockCanvasAndPost(canvas);
        }

        @Override
        public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

        }

        @Override
        public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
            return false;
        }

        @Override
        public void onSurfaceTextureUpdated(SurfaceTexture surface) {

        }
    });

В основном мы помещаем наш фон в TextureView вместо того, чтобы использовать стандартные способы Android (android:background, imageVew и т. д.).

Также в качестве рекомендации вам необходимо добавить фоны для всех точек на дюйм (mdpi, hpdi, ...) для лучшей производительности.

Я знаю, что это уродливое решение, но оно работает для меня, когда ничего другого не помогло...

person Kulibin    schedule 20.08.2015