Три скользящие панели — средняя панель над левой и правой панелями.

Я пытаюсь использовать тот же стиль навигации, что и интерфейс Viber (страница обсуждения), без использования сторонней библиотеки, такой как SlidingMenu.

Я думал, что они использовали SlidingPaneLayout для достижения этого приятного эффекта, но когда я попытался его закодировать, я заметил, что последняя панель всегда находится над второй.

Мои вопросы:

  1. Это действительно SlidingPaneLayout?
  2. Если да, то как этого добиться, пожалуйста?
  3. Если нет, есть ли собственный способ сделать то же самое для Android?!

Левая панель

Левая панель

Правая панель

Правая панель


person S.Thiongane    schedule 28.03.2014    source источник
comment
Если вы не хотите использовать какую-либо стороннюю библиотеку, вы можете создать свой собственный экран, а затем применить к нему анимацию, например слайдер.   -  person InnocentKiller    schedule 28.03.2014
comment
спасибо @InnocentKiller. Можно поточнее, как применить такую ​​анимацию??!   -  person S.Thiongane    schedule 28.03.2014
comment
проверьте мой ответ ниже.   -  person InnocentKiller    schedule 28.03.2014


Ответы (1)


Прежде всего объявите эту переменную в вашем классе

/** Sliding Menu */
    boolean alreadyShowing = false;
    private int windowWidth;
    private Animation animationClasses;
    private RelativeLayout classesSlider;
    LayoutInflater layoutInflaterClasses;

затем внутри метода onCreate объявите это, это поможет вам получить высоту и ширину экрана

Display display = getWindowManager().getDefaultDisplay();
        windowWidth = display.getWidth();
        display.getHeight();
        layoutInflaterClasses = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

а затем любую вашу кнопку или изображение, нажав на которое вы хотите открыть слайдер, поместите код ниже.

findViewById(R.id.slidermenu).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!alreadyShowing) {
                    alreadyShowing = true;
                    openSlidingMenu();
                }
            }
        });

а затем вне onCreate объявите openSlidingMenu(), как показано ниже.

private void openSlidingMenu() {
        // showFadePopup();
        int width = (int) (windowWidth * 0.8f);
        translateView((float) (width));
        @SuppressWarnings("deprecation")
        int height = LayoutParams.FILL_PARENT;
        // creating a popup
        final View layout = layoutInflaterClasses.inflate(
                R.layout.option_popup_layout,
                (ViewGroup) findViewById(R.id.popup_element));

        ImageView imageViewassignment = (ImageView) layout
                .findViewById(R.id.assignment);
        imageViewassignment.setOnClickListener(this);

final PopupWindow optionsPopup = new PopupWindow(layout, width, height,
                true);
        optionsPopup.setBackgroundDrawable(new PaintDrawable());
        optionsPopup.showAtLocation(layout, Gravity.NO_GRAVITY, 0, 0);
        optionsPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
            public void onDismiss() {
                // to clear the previous animation transition in
                cleanUp();
                // move the view out
                translateView(0);
                // to clear the latest animation transition out
                cleanUp();
                // resetting the variable
                alreadyShowing = false;
            }
        });
    }

просто заменить

final View layout = layoutInflaterClasses.inflate(
                    R.layout.option_popup_layout,
                    (ViewGroup) findViewById(R.id.popup_element));

этот приведенный выше код с вашим пользовательским именем XML экрана и его идентификатором. и вот другие методы, которые вам нужны.

private void translateView(float right) {
        animationClasses = new TranslateAnimation(0f, right, 0f, 0f);
        animationClasses.setDuration(100);
        animationClasses.setFillEnabled(true);
        animationClasses.setFillAfter(true);

        classesSlider = (RelativeLayout) findViewById(R.id.classes_slider);
        classesSlider.startAnimation(animationClasses);
        classesSlider.setVisibility(View.VISIBLE);
    }

    private void cleanUp() {
        if (null != classesSlider) {
            classesSlider.clearAnimation();
            classesSlider = null;
        }
        if (null != animationClasses) {
            animationClasses.cancel();
            animationClasses = null;
        }
    }

помните здесь animationClasses = new TranslateAnimation(0f, right, 0f, 0f); вы можете поиграть с этим параметром для получения другого эффекта, а также не забудьте изменить идентификатор этой строки на идентификатор вашего текущего экрана, например, проверьте идентификатор ниже

classesSlider = (RelativeLayout) findViewById(R.id.classes_slider);

здесь вам нужно заменить этот идентификатор идентификатором XML-файла текущего экрана Java.

Надеюсь, что это поможет вам.

person InnocentKiller    schedule 28.03.2014