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

news/2024/11/18 2:25:04/
这个咱再分享个天天动听的半透明Menu效果,个人感觉挺漂亮。

看下效果。 1.png 



感觉如何啊?

分解一下:
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) 

http://www.ppmy.cn/news/267469.html

相关文章

天天动听皮肤、歌手头像、字体等的使用方法

天天动听功能介绍&#xff1a; 1.支持播放您手机所支持的所有音频、视频&#xff08;仅声音&#xff09;&#xff1b;2.支持列表播放和文件夹播放&#xff1b;3.支持对播放列表进行收藏、删除、修改等管理&#xff1b;4.支持多种循环播放模式&#xff1b;5.支持快捷键便捷操作&…

酷狗、QQ、天天动听——手机音乐播放器竞品对比

如果说什么艺术与人们生活最贴近&#xff0c;那应该属音乐了&#xff0c;因此当代人不离身的手机里必然会有自己喜欢的音乐播放器APP存在。 在当今无论PC端还是手机端音乐播放器都越来越同质化&#xff0c;我们应该选择哪款手机音乐播放器&#xff1f;它们又有哪些异同&#xf…

天天动听 悬浮歌词(迷你歌词)效果解读

天天动听&#xff0c; 这款Android手机上的音乐播放器&#xff0c;相信不少朋友都曾用过。 不知大家是否注意到&#xff0c;天天动听有一个迷你歌词的特效。 什么效果呢&#xff1f; 就是不管你切到什么画面&#xff0c; 歌词永远显示&#xff0c;并且可以拖动。 类型QQ音乐&am…

天天动听MP3解码器性能提升50%

天天动听今日升级提醒&#xff0c;发现有一句 “使用新的MP3解码器&#xff0c;性能提升50%”&#xff0c;太惊讶了。 之前版本的MP3解码器使用libmpg123&#xff0c;效果已经是MP3解码器中非常不错的了。 50%的提升&#xff0c;应该不仅仅是优化这么简单&#xff0c;莫非使用的…

基于天天动听API开发在线音乐查询网站

预览图 源码下载 地址&#xff1a;https://github.com/bajdcc/dev/tree/master/ttpod 文件夹说明&#xff1a; App_Code&#xff0c;WCF服务 Script&#xff0c;离线下载的celery任务配置 dl&#xff0c;离线下载接口 ttpod&#xff0c;网站主体 Bin&#xff0c;组件类库 实现功…

android音乐播放器之----天天动听

下载手机软件的时候&#xff0c;随意的下了个天天动听&#xff0c;觉得喜欢&#xff0c;就仿照着他的UI做了个简单的音乐播放器&#xff0c;还不完善&#xff0c;只是在工作之余随便做做&#xff0c;贴图&#xff1a; 本文来自CSDN丹丹博库&#xff0c;转载请必须注明出处&…

【Android进阶】天天动听 悬浮歌词(迷你歌词)效果解读

转自&#xff1a;http://blog.csdn.net/feng88724/article/details/6362710 天天动听&#xff0c; 这款Android手机上的音乐播放器&#xff0c;相信不少朋友都曾用过。 不知大家是否注意到&#xff0c;天天动听有一个迷你歌词的特效。 什么效果呢&#xff1f; 就是不管你切到什…

安卓实现天天动听音乐播放歌词悬浮哦(转)

无意间在群里看到有朋友问过如何实现歌词悬浮等问题&#xff0c;再加小马本身也好奇这个是怎么实现的&#xff0c;所以专门找了下这方面的文章&#xff0c;找到一篇我本人觉得不错的文章&#xff0c;所以转来与大家分享咯&#xff0c;呵&#xff0c;开始咱们的歌词悬浮实现: 小…