最近在写一个百度地图的小应用,毕竟屏就那么大一点,要在上面放几个按钮,怎么布置都难看。百度了一下,发现侧滑菜单挺好,可百度地图就是用手滑的啊,你妹,这两个玩意居然还冲突,我去年买了个表。于是乎,就想到了上推菜单,不能用滑屏来处理,那就用个按钮来激发上推事件吧。因为是新手啥JB玩意都不懂,问群里的大大们,说得用平移动画,我又百度了半天一看都TM太高大上,用不好。偶然在一段代码中发现了
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
lp.setMargins(0, 0, 0, 0);
menu.setLayoutParams(lp);
这个玩意,仔细琢磨了一宿,总算是实现了我的需求,话不多说上效果图,放代码,算是自己一个小突破,放博客里以记之。
首先创一个布局文件,其中包含两个Linealayout,也就是这上面用到的 主视图和菜单视图
接下来就开始实现功能了
package com.example.upmenu;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
Button up;
LinearLayout menu,view;
private LinearLayout.LayoutParams lp,lp2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
up = (Button)findViewById(R.id.bt_up);
menu = (LinearLayout) findViewById(R.id.menu);
view = (LinearLayout) findViewById(R.id.view);
up.setText("上拉菜单");
up.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
UpButton();
}
});
}
private void UpButton(){
//设定上拉View的高度为主视图的三分之一
int h;
h= view.getHeight()/3;
if (up.getText() == "上拉菜单"){
//这里得分两条设置否则是还不到效果的,LinearLayout.LayoutParams(宽, 高),这个参数主要是用来显示平移后视图的显示方式。
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
//lp.setMargins(left, top, right, bottom)可作参考。
//设定菜单视图向上平移距离
lp.setMargins(0, -h, 0, 0);
//设定主视图顶端和底端同时向上平移距离,如果bottom不设为h的话,底端的按钮不会随主视图一起向上平移,搞了半天才弄出来,就是卡在这个参数没设置,靠!
lp2.setMargins(0,-h, 0, h);
menu.setLayoutParams(lp);
view.setLayoutParams(lp2);
up.setText("下拉菜单");
} else if (up.getText() =="下拉菜单"){
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
//两个视图返回原位置
lp.setMargins(0, 0, 0, 0);
menu.setLayoutParams(lp);
view.setLayoutParams(lp);
up.setText("上拉菜单");
}
}
//返回按钮也可以取消菜单视图
public boolean onKeyDown(int keyCode, KeyEvent event) {
UpButton();
return super.onKeyDown(keyCode, event);
}
}
不知道这种方法有多少人用,反正我在网上找了大半天也没有实现这个功能的,个人认为是最简单、最易懂的上推菜单了。