Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1061|回复: 0

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

[复制链接]

该用户从未签到

发表于 2011-10-22 13:27:10 | 显示全部楼层 |阅读模式
这个咱再分享个天天动听的半透明Menu效果,个人感觉挺漂亮。

看下效果。  




感觉如何啊?

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

比较简单,不多说了。

半透明圆角背景:
<?xml version="1.0" encoding="UTF-8"?>

<shape android:shape="rectangle"

  xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#b4000000" />

    <stroke android:width="2.0dip" android:color="#b4ffffff" android:dashWidth="3.0dip" android:dashGap="0.0dip" />

    <padding android:left="7.0dip" android:top="7.0dip" android:right="7.0dip" android:bottom="7.0dip" />

    <corners android:radius="8.0dip" />

</shape>
Menu布局:
<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout

        androidrientation="vertical"

        android:layout_width="wrap_content"

        android:layout_height="fill_parent"

        xmlns:android="http://schemas.android.com/apk/res/android">

        <GridView android:gravity="center"

                android:layout_gravity="center"

                android:id="@+id/menuGridChange"

                android:background="@drawable/menu_bg_frame"

                android:padding="5.0dip"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"

                android:horizontalSpacing="10.0dip"

                android:verticalSpacing="3.0dip"

                android:stretchMode="columnWidth"

                android:columnWidth="60.0dip"

                android:numColumns="auto_fit"

                xmlns:android="http://schemas.android.com/apk/res/android" />

</LinearLayout>
主要类:
package com.yfz;



import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.Context;

import android.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

import android.util.Log;

import android.view.ContextMenu;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.view.ContextMenu.ContextMenuInfo;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.PopupWindow;

import android.widget.TextView;

import android.widget.LinearLayout.LayoutParams;



public class MenuTest extends Activity {

        

        private String TAG = this.getClass().getSimpleName();

        

        private int[] resArray = new int[] {

                        R.drawable.icon_menu_addto, R.drawable.icon_menu_audioinfo,

                        R.drawable.icon_menu_findlrc, R.drawable.icon_menu_scan

        };

        

        private String[] title = new String[]{

                        "添加歌曲", "歌曲信息", "查找歌词", "搜索歌词"

        };

        

        private static boolean show_flag = false;

        

        private PopupWindow pw = null;

        

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

   







        @Override

        public boolean onCreateOptionsMenu(Menu menu) {

                Log.e(TAG, "------  onCreateOptionsMenu ------");

               

                //用AlertDialog弹出menu

//                View view = LayoutInflater.from(this).inflate(R.layout.menu, null);

//                GridView grid1 = (GridView)view.findViewById(R.id.menuGridChange);

//                grid1.setAdapter(new ImageAdapter(this));

//                Builder build = new AlertDialog.Builder(this);

//                build.setView(view);

//                build.show();

               

                LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);      

                View view = inflater.inflate(R.layout.menu, null);

                GridView grid1 = (GridView)view.findViewById(R.id.menuGridChange);

                grid1.setAdapter(new ImageAdapter(this));

               

                //用Popupwindow弹出menu

                pw = new PopupWindow(view,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

               

                //NND, 第一个参数, 必须找个View

                pw.showAtLocation(findViewById(R.id.tv), Gravity.CENTER, 0, 300);

               

                return true;

        }









        @Override

        public boolean onOptionsItemSelected(MenuItem item) {

                return super.onOptionsItemSelected(item);

        }









        public class ImageAdapter extends BaseAdapter {

               

                private Context context;

               

                public ImageAdapter(Context context) {

                        this.context = context;

                }

               

                @Override

                public int getCount() {

                        return resArray.length;

                }



                @Override

                public Object getItem(int arg0) {

                        return resArray[arg0];

                }



                @Override

                public long getItemId(int arg0) {

                        return arg0;

                }



                @Override

                public View getView(int arg0, View arg1, ViewGroup arg2) {

                        LinearLayout linear = new LinearLayout(context);

                        LinearLayout.LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

                        linear.setOrientation(LinearLayout.VERTICAL);

                        

                        ImageView iv = new ImageView(context);

                        iv.setImageBitmap(((BitmapDrawable)context.getResources().getDrawable(resArray[arg0])).getBitmap());

                        LinearLayout.LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

                        params2.gravity=Gravity.CENTER;

                        linear.addView(iv, params2);

                        

                        TextView tv = new TextView(context);

                        tv.setText(title[arg0]);

                        LinearLayout.LayoutParams params3 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

                        params3.gravity=Gravity.CENTER;

                        

                        linear.addView(tv, params3);

                        

                        return linear;

                }

        }

}
就这样哈:


源码下载:  MenuTest.zip (62.09 KB, 下载次数: 132)
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:27:17 | 显示全部楼层

Re:[实例教程][Android实例]

不错挺漂亮,谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:27:22 | 显示全部楼层

Re:[实例教程][Android实例]

不错挺漂亮,谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:27:32 | 显示全部楼层

Re:[实例教程][Android实例]

这个还是很PP的~~
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:27:39 | 显示全部楼层

Re:[实例教程][Android实例]

这个还是真的可以有的啦
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:27:49 | 显示全部楼层

Re:[实例教程][Android实例]

谢谢楼主~~~
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:27:58 | 显示全部楼层

Re:[实例教程][Android实例]

:loveliness::loveliness::loveliness:学习下
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:28:10 | 显示全部楼层

Re:[实例教程][Android实例]

good....谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:28:17 | 显示全部楼层

Re:[实例教程][Android实例]

谢谢分享,学习中...
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:28:25 | 显示全部楼层

Re:[实例教程][Android实例]

chino 的帖子

请教楼主
  按钮的监听事件在Adapter里怎么加?能否给个实例!

谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-22 17:44 , Processed in 0.432652 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表