android从底部浮出的菜单

实例原代码:

http://download.csdn.net/detail/zhuimengandyue/5914779

一、效果图如下:

          (1)正在冒出效果

            (2)全部浮出效果

二、实现代码:

import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.SimpleAdapter;
import android.widget.ViewFlipper;
import android.widget.AdapterView.OnItemClickListener;

public class FlipperMenuActivity extends Activity{
 /*初始化布局中的组件*/
 private PopupWindow popup; 
 private GridView mGridView;
 private LinearLayout mLayout;
 private ViewFlipper mViewFlipper;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.test_menu);
  this.initPopupMenu();
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  menu.add("menu");
  return super.onCreateOptionsMenu(menu);
 }
 public void initPopupMenu() {
  //创建动画
  mViewFlipper = new ViewFlipper(this);
  mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.menu_in));
  mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.menu_out));
  //创建布局
  mLayout = new LinearLayout(FlipperMenuActivity.this);
  mLayout.setOrientation(LinearLayout.VERTICAL);
  //创建列表
  mGridView = new GridView(FlipperMenuActivity.this);
  mGridView.setBackgroundResource(R.drawable.toolbar_menu_bg);
  mGridView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                   LayoutParams.WRAP_CONTENT));
  mGridView.setSelector(R.drawable.toolbar_menu_item);//背景选择器
  mGridView.setNumColumns(4);
  mGridView.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
 // mGridView.setVerticalSpacing(10);
  //mGridView.setHorizontalSpacing(10);
  //mGridView.setPadding(10, 10, 10, 10);
  mGridView.setGravity(Gravity.CENTER);      
     String[] titleName = {"菜单一","菜单二","菜单三","退出"};
     int[] images = {R.drawable.menu_refresh,R.drawable.menu_downmanager,
                                   R.drawable.menu_help,R.drawable.menu_quit};
     mGridView.setAdapter(this.getMenuAdapter(titleName, images));
     mGridView.setOnItemClickListener(new OnItemClickListener() {
 
   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
     long arg3) {
    switch(arg2) {
    case 0:{
     break;
    }    
    case 1:break;
    case 2:{
     break;
    }
    case 3:{
        new AlertDialog.Builder(FlipperMenuActivity.this).setTitle("提示")
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setMessage("确定要退出吗?")
        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
      
      @Override
      public void onClick(DialogInterface dialog, int which) {
       //杀死进程
       android.os.Process.killProcess(android.os.Process.myPid());
      }
     })
     .setNegativeButton("取消", new DialogInterface.OnClickListener() {
      
      @Override
      public void onClick(DialogInterface dialog, int which) {
       // 暂无实现的方法      
      }
     }).show();
     break;
    }
    default:break;
    }
   }
  });
      
      //添加如Layout中
     mLayout.addView(mGridView);
     mViewFlipper.addView(mLayout);
     mViewFlipper.setFlipInterval(2000);
     //创建popup
     this.popup = new PopupWindow(mViewFlipper,LayoutParams.FILL_PARENT,
                             LayoutParams.WRAP_CONTENT);
   //  mGridView.setFocusable(true);
//     popup.setOutsideTouchable(true);
     popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_bg));
     popup.setFocusable(true);//此项必须设置,否则点击无反应
 }
 private SimpleAdapter getMenuAdapter(String[] menuNameArray,
   int[] imageResourceArray) {
  ArrayList<HashMap<String, Object>> data
                                   = new ArrayList<HashMap<String, Object>>();
  for (int i = 0; i < menuNameArray.length; i++) {
   HashMap<String, Object> map = new HashMap<String, Object>();
   map.put("itemImage", imageResourceArray[i]);
   map.put("itemText", menuNameArray[i]);
   data.add(map);
  }
  SimpleAdapter simperAdapter = new SimpleAdapter(this, data,
    R.layout.item_menu, new String[] { "itemImage", "itemText" },
    new int[] { R.id.item_image, R.id.item_text });
          return simperAdapter;
 }
 @Override
 public boolean onMenuOpened(int featureId, Menu menu) {
  // TODO Auto-generated method stub
  if(popup!=null) {
   if(popup.isShowing()) {
    //如果显示,则关闭
    popup.dismiss();
   }else {
    popup.showAtLocation(findViewById(R.id.linear), Gravity.BOTTOM, 0, 0);
       mViewFlipper.startFlipping();
       /*
        * 延时两秒结束动作
        */
       new CountDownTimer(2000, 1000) {
     @Override
     public void onFinish() {
      // TODO Auto-generated method stub
      mViewFlipper.stopFlipping();      
     }
     @Override
     public void onTick(long millisUntilFinished) {
      // 暂无实现的代码    
     }       
       }.start();    
   }
  }
  return false; //如果返回true则显示系统menu
 }
}

testmenu.xml如下:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="从底部浮出的menu菜单"
       android:textSize="24sp"/>
   

</LinearLayout>

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"

android:background="#007612">
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="从底部浮出的menu菜单"
       android:textSize="24sp"/>
   

</LinearLayout>

item_menu.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
 android:id="@+id/RelativeLayout_bg"
 android:layout_width="fill_parent" android:layout_height="wrap_content"
 android:paddingTop="5dip"
 android:paddingBottom="5dip">
 <ImageView android:id="@+id/item_image"
  android:layout_centerHorizontal="true" android:layout_width="wrap_content"
  android:layout_height="wrap_content"></ImageView>
 <TextView android:layout_below="@id/item_image" android:id="@+id/item_text"
  android:layout_centerHorizontal="true" android:layout_width="wrap_content"
  android:layout_height="wrap_content" android:textColor="#FFFFFFFF"></TextView>
</RelativeLayout>

menu_in.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="
http://schemas.android.com/apk/res/android">
 <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="2000" />
 <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
</set>

menu_out.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="
http://schemas.android.com/apk/res/android">
 <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="2000" />
 <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
</set>

 三、注意项

     popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_bg));

   //此项必须设置,否则点击菜单周围,pop不消失.
     popup.setFocusable(true);//此项必须设置,否则点击菜单项无反应

      popup.showAtLocation(findViewById(R.id.linear), Gravity.BOTTOM, 0, 0);//设置pop显示在底部
       mViewFlipper.startFlipping();//开始动画

  mViewFlipper = new ViewFlipper(this);
  mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.menu_in));//创建flipper的切入动画
  mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.menu_out));

关于translate的fromYDelta的值比如"100%p" 等的介绍如下图所示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值