我试图拥有与 Viber 的界面(讨论页面)相同的导航风格,而不使用第三方库,例如SlidingMenu
.
我以为他们已经习惯SlidingPaneLayout
了这种很好的效果,但是当我尝试对其进行编码时,我注意到最后一个窗格总是在第二个窗格之上。
我的问题:
- 这真的是一个
SlidingPaneLayout
吗? - 如果是,请如何实现?
- 如果没有,是否有安卓原生方式来做同样的事情?!
左窗格
右窗格
我试图拥有与 Viber 的界面(讨论页面)相同的导航风格,而不使用第三方库,例如SlidingMenu
.
我以为他们已经习惯SlidingPaneLayout
了这种很好的效果,但是当我尝试对其进行编码时,我注意到最后一个窗格总是在第二个窗格之上。
我的问题:
SlidingPaneLayout
吗?左窗格
右窗格
首先在你的类中声明这个所有变量
/** 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 名称和它的 ID。这是您需要的其他方法。
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);
你可以使用这个参数来获得一些不同的效果,也不要忘记用你当前屏幕的 ID 更改这一行的 ID,例如检查下面的 id
classesSlider = (RelativeLayout) findViewById(R.id.classes_slider);
在这里,您需要将此 ID 替换为当前 java 屏幕的 XML 文件的 ID。
希望这会帮助你。