[Android实例] 天天动听 半透明Menu效果

这个咱再分享个天天动听的半透明Menu效果,个人感觉挺漂亮。

看下效果。  



感觉如何啊?

分解一下:
1.  利用Shaper设置一个半透明圆角背景
2.  定义Menu布局,主要就GridView,把图标都放在这个GridView
3.  Menu事件, 通过PopupWindow或者AlertDialog或者透明Activity显示到页面即可。
4. 按钮的监听事件,实例中没加。需要的话自己在Adapter里加

比较简单,不多说了。

半透明圆角背景:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <shape android:shape="rectangle"
  3.   xmlns:android="http://schemas.android.com/apk/res/android">
  4.     <solid android:color="#b4000000" />
  5.     <stroke android:width="2.0dip" android:color="#b4ffffff" android:dashWidth="3.0dip" android:dashGap="0.0dip" />
  6.     <padding android:left="7.0dip" android:top="7.0dip" android:right="7.0dip" android:bottom="7.0dip" />
  7.     <corners android:radius="8.0dip" />
  8. </shape>
复制代码
Menu布局:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <LinearLayout
  3.         android:orientation="vertical"
  4.         android:layout_width="wrap_content"
  5.         android:layout_height="fill_parent"
  6.         xmlns:android="http://schemas.android.com/apk/res/android">
  7.         <GridView android:gravity="center"
  8.                 android:layout_gravity="center"
  9.                 android:id="@+id/menuGridChange"
  10.                 android:background="@drawable/menu_bg_frame"
  11.                 android:padding="5.0dip"
  12.                 android:layout_width="fill_parent"
  13.                 android:layout_height="wrap_content"
  14.                 android:horizontalSpacing="10.0dip"
  15.                 android:verticalSpacing="3.0dip"
  16.                 android:stretchMode="columnWidth"
  17.                 android:columnWidth="60.0dip"
  18.                 android:numColumns="auto_fit"
  19.                 xmlns:android="http://schemas.android.com/apk/res/android" />
  20. </LinearLayout>
复制代码
主要类:
  1. package com.yfz;

  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.app.AlertDialog.Builder;
  5. import android.content.Context;
  6. import android.graphics.drawable.BitmapDrawable;
  7. import android.os.Bundle;
  8. import android.util.Log;
  9. import android.view.ContextMenu;
  10. import android.view.Gravity;
  11. import android.view.LayoutInflater;
  12. import android.view.Menu;
  13. import android.view.MenuItem;
  14. import android.view.View;
  15. import android.view.ViewGroup;
  16. import android.view.ContextMenu.ContextMenuInfo;
  17. import android.widget.BaseAdapter;
  18. import android.widget.GridView;
  19. import android.widget.ImageView;
  20. import android.widget.LinearLayout;
  21. import android.widget.PopupWindow;
  22. import android.widget.TextView;
  23. import android.widget.LinearLayout.LayoutParams;

  24. public class MenuTest extends Activity {
  25.         
  26.         private String TAG = this.getClass().getSimpleName();
  27.         
  28.         private int[] resArray = new int[] {
  29.                         R.drawable.icon_menu_addto, R.drawable.icon_menu_audioinfo,
  30.                         R.drawable.icon_menu_findlrc, R.drawable.icon_menu_scan
  31.         };
  32.         
  33.         private String[] title = new String[]{
  34.                         "添加歌曲", "歌曲信息", "查找歌词", "搜索歌词"
  35.         };
  36.         
  37.         private static boolean show_flag = false;
  38.         
  39.         private PopupWindow pw = null;
  40.         
  41.     /** Called when the activity is first created. */
  42.     @Override
  43.     public void onCreate(Bundle savedInstanceState) {
  44.         super.onCreate(savedInstanceState);
  45.         setContentView(R.layout.main);
  46.     }
  47.     



  48.         @Override
  49.         public boolean onCreateOptionsMenu(Menu menu) {
  50.                 Log.e(TAG, "------  onCreateOptionsMenu ------");
  51.                 
  52.                 //用AlertDialog弹出menu
  53. //                View view = LayoutInflater.from(this).inflate(R.layout.menu, null);
  54. //                GridView grid1 = (GridView)view.findViewById(R.id.menuGridChange);
  55. //                grid1.setAdapter(new ImageAdapter(this));
  56. //                Builder build = new AlertDialog.Builder(this);
  57. //                build.setView(view);
  58. //                build.show();
  59.                 
  60.                 LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);      
  61.                 View view = inflater.inflate(R.layout.menu, null);
  62.                 GridView grid1 = (GridView)view.findViewById(R.id.menuGridChange);
  63.                 grid1.setAdapter(new ImageAdapter(this));
  64.                 
  65.                 //用Popupwindow弹出menu
  66.                 pw = new PopupWindow(view,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
  67.                 
  68.                 //NND, 第一个参数, 必须找个View
  69.                 pw.showAtLocation(findViewById(R.id.tv), Gravity.CENTER, 0, 300);
  70.                 
  71.                 return true;
  72.         }




  73.         @Override
  74.         public boolean onOptionsItemSelected(MenuItem item) {
  75.                 return super.onOptionsItemSelected(item);
  76.         }




  77.         public class ImageAdapter extends BaseAdapter {
  78.                 
  79.                 private Context context;
  80.                 
  81.                 public ImageAdapter(Context context) {
  82.                         this.context = context;
  83.                 }
  84.                 
  85.                 @Override
  86.                 public int getCount() {
  87.                         return resArray.length;
  88.                 }

  89.                 @Override
  90.                 public Object getItem(int arg0) {
  91.                         return resArray[arg0];
  92.                 }

  93.                 @Override
  94.                 public long getItemId(int arg0) {
  95.                         return arg0;
  96.                 }

  97.                 @Override
  98.                 public View getView(int arg0, View arg1, ViewGroup arg2) {
  99.                         LinearLayout linear = new LinearLayout(context);
  100.                         LinearLayout.LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  101.                         linear.setOrientation(LinearLayout.VERTICAL);
  102.                         
  103.                         ImageView iv = new ImageView(context);
  104.                         iv.setImageBitmap(((BitmapDrawable)context.getResources().getDrawable(resArray[arg0])).getBitmap());
  105.                         LinearLayout.LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  106.                         params2.gravity=Gravity.CENTER;
  107.                         linear.addView(iv, params2);
  108.                         
  109.                         TextView tv = new TextView(context);
  110.                         tv.setText(title[arg0]);
  111.                         LinearLayout.LayoutParams params3 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  112.                         params3.gravity=Gravity.CENTER;
  113.                         
  114.                         linear.addView(tv, params3);
  115.                         
  116.                         return linear;
  117.                 }
  118.         }
  119. }
复制代码
就这样哈:


源码下载:  MenuTest.zip (62.09 KB, 下载次数: 1098) 

你可能感兴趣的:(menu,Android基础学习)