`
lxm3033
  • 浏览: 20027 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PopMenu效果的学习

阅读更多

PopMenu效果的学习

看到很多的程序里面都用了PopMenu的效果,给人的体验非常好,今天也学着做了一个,效果如下:

PopMenu.java

 

[java] view plaincopy
  1. public class PopMenu extends Activity {  
  2.     private int SCREEN_WIDTH;  
  3.     private int SCREEN_HEIGHT;  
  4.     private final static int MENU_CREATE_DIRECTORY = 0;  
  5.     private final static int MENU_CREATE_FILE = 1;  
  6.     private final static int MENU_PASTE = 2;  
  7.     public final static int MENU_SEARCH = 3;  
  8.     private final static int MENU_SHOW_COPY_DIALOG = 4;  
  9.     private final static int MENU_APK_MANAGER = 5;  
  10.     private final static int MENU_SETTING = 6;  
  11.     private final static int MENU_SET_VIEW_STYLE = 7;  
  12.     private final static int MENU_FILE_LIB = 8;  
  13.     private final static int MENU_FINISH_ACTIVITY = 9;  
  14.     private LinearLayout appMenu;  
  15.     private Animation menuShowAnimation;  
  16.     private Animation menuHideAnimation;  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.main);  
  21.         SCREEN_WIDTH = getResources().getDisplayMetrics().widthPixels;  
  22.         SCREEN_HEIGHT = getResources().getDisplayMetrics().heightPixels;  
  23.         initAppMenu();  
  24.     }  
  25.     private void initAppMenu() {  
  26.         appMenu = (LinearLayout) findViewById(R.id.appMenu);  
  27.         LinearLayout row = (LinearLayout) appMenu.findViewById(R.id.appRow1);  
  28.         int[] drRes = { R.drawable.newfolder, R.drawable.newfile,  
  29.                 R.drawable.paste, R.drawable.search, R.drawable.dialog,  
  30.                 R.drawable.apkmanager, R.drawable.setting, R.drawable.multicon,  
  31.                 R.drawable.filelib, R.drawable.close };  
  32.         String[] names = getResources().getStringArray(R.array.appnames);  
  33.         LayoutInflater inflater = getLayoutInflater();  
  34.         View.OnClickListener listener = new View.OnClickListener() {  
  35.             @Override  
  36.             public void onClick(View v) {  
  37.                 appMenuOnClick(v.getId());  
  38.                 hideAppMenu();  
  39.             }  
  40.         };  
  41.         for (int i = 0; i < 10; i++) {  
  42.             if (i == 5) {  
  43.                 row = (LinearLayout) appMenu.findViewById(R.id.appRow2);  
  44.             }  
  45.             RelativeLayout rowItem = (RelativeLayout) inflater.inflate(  
  46.                     R.layout.appmenuitem, null);  
  47.             ImageButton icon = (ImageButton) rowItem  
  48.                     .findViewById(R.id.menuicon);  
  49.             TextView name = (TextView) rowItem.findViewById(R.id.menuname);  
  50.             icon.setBackgroundResource(drRes[i]);  
  51.             icon.setId(i);  
  52.             name.setText(names[i]);  
  53.             icon.setOnClickListener(listener);  
  54.             row.addView(rowItem);  
  55.         }  
  56.     }  
  57.     private void appMenuOnClick(int whitch) {  
  58.         switch (whitch) {  
  59.         case MENU_CREATE_DIRECTORY:  
  60.             Toast.makeText(this"Create Directory", Toast.LENGTH_LONG).show();  
  61.             break;  
  62.         case MENU_CREATE_FILE:  
  63.             Toast.makeText(this"Create File", Toast.LENGTH_LONG).show();  
  64.             break;  
  65.         case MENU_PASTE:  
  66.             Toast.makeText(this"Paste", Toast.LENGTH_LONG).show();  
  67.             break;  
  68.         case MENU_SEARCH:  
  69.             Toast.makeText(this"Search", Toast.LENGTH_LONG).show();  
  70.             break;  
  71.         case MENU_FINISH_ACTIVITY:  
  72.             Toast.makeText(this"Finish Activity", Toast.LENGTH_LONG).show();  
  73.             break;  
  74.         case MENU_SHOW_COPY_DIALOG:  
  75.             Toast.makeText(this"Show Copy Dialog", Toast.LENGTH_LONG).show();  
  76.             break;  
  77.         case MENU_SETTING:  
  78.             Toast.makeText(this"Setting", Toast.LENGTH_LONG).show();  
  79.             break;  
  80.         case MENU_SET_VIEW_STYLE:  
  81.             Toast.makeText(this"Set View Style", Toast.LENGTH_LONG).show();  
  82.             break;  
  83.         default:  
  84.             break;  
  85.         }  
  86.     }  
  87.     @Override  
  88.     public boolean dispatchKeyEvent(KeyEvent event) {  
  89.         int actiton = event.getAction();  
  90.         int code = event.getKeyCode();  
  91.         switch (code) {  
  92.         case KeyEvent.KEYCODE_MENU:  
  93.             if (actiton == KeyEvent.ACTION_DOWN) {  
  94.                 if (appMenu.getVisibility() == View.INVISIBLE) {  
  95.                     showAppMenu();  
  96.                 } else {  
  97.                     hideAppMenu();  
  98.                 }  
  99.             }  
  100.             break;  
  101.         case KeyEvent.KEYCODE_BACK:  
  102.             if (appMenu.getVisibility() == View.INVISIBLE) {  
  103.                 hideAppMenu();  
  104.             }  
  105.             break;  
  106.         default:  
  107.             break;  
  108.         }  
  109.         return super.dispatchKeyEvent(event);  
  110.     }  
  111.     @Override  
  112.     public boolean dispatchTouchEvent(MotionEvent event) {  
  113.         if (appMenu.getVisibility() == View.VISIBLE) {  
  114.             int y = (int) event.getRawY();  
  115.             if (y < SCREEN_HEIGHT - appMenu.getHeight()) {  
  116.                 hideAppMenu();  
  117.                 return true;  
  118.             }  
  119.         }  
  120.         return super.dispatchTouchEvent(event);  
  121.     }  
  122.     private void hideAppMenu() {  
  123.         appMenu.setVisibility(View.INVISIBLE);  
  124.         if (menuHideAnimation == null) {  
  125.             menuHideAnimation = AnimationUtils.loadAnimation(this,  
  126.                     R.anim.menuhide);  
  127.         }  
  128.         appMenu.startAnimation(menuHideAnimation);  
  129.     }  
  130.     private void showAppMenu() {  
  131.         appMenu.setVisibility(View.VISIBLE);  
  132.         if (menuShowAnimation == null) {  
  133.             menuShowAnimation = AnimationUtils.loadAnimation(this,  
  134.                     R.anim.menushow);  
  135.         }  
  136.         appMenu.startAnimation(menuShowAnimation);  
  137.     }  
  138. }  
 

 

res/anim中对于动画的控制:

menuhide.xml:

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate  
  4.         android:fromXDelta="0"  
  5.         android:toXDelta="0"  
  6.         android:fromYDelta="120"  
  7.         android:toYDelta="00"  
  8.         android:duration="200" />  
  9. </set>  
 

 

menushow.xml:

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate  
  4.         android:fromXDelta="0"  
  5.         android:toXDelta="0"  
  6.         android:fromYDelta="00"  
  7.         android:toYDelta="120"  
  8.         android:duration="200" />  
  9. </set>  
 

 

layout/main.xml:

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">  
  5.     <TextView android:layout_width="fill_parent"  
  6.         android:layout_height="wrap_content" android:text="@string/hello" />  
  7.     <LinearLayout android:id="@+id/appMenu" android:layout_gravity="bottom"  
  8.         android:orientation="vertical" android:layout_width="fill_parent"  
  9.         android:layout_height="125dip" android:visibility="visible"  
  10.         android:background="@drawable/menubackground"   
  11.         android:layout_alignParentBottom="true">  
  12.         <LinearLayout android:id="@+id/appRow1"  
  13.             android:orientation="horizontal" android:gravity="center_horizontal"  
  14.             android:layout_gravity="center_horizontal" android:padding="2dip"  
  15.             android:layout_width="fill_parent" android:layout_height="60dip">  
  16.         </LinearLayout>  
  17.         <LinearLayout android:id="@+id/appRow2"  
  18.             android:orientation="horizontal" android:gravity="center_horizontal"  
  19.             android:layout_gravity="center_horizontal" android:padding="2dip"  
  20.             android:layout_width="fill_parent" android:layout_height="60dip">  
  21.         </LinearLayout>  
  22.     </LinearLayout>  
  23. </RelativeLayout>  
 

 

layout/appmenuitem.xml:

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:layout_height="60dp"  
  4.     android:layout_width="60dp"  
  5.     android:gravity="center_horizontal">  
  6.     <ImageButton android:id="@+id/menuicon"  
  7.         android:layout_height="60dp" android:layout_width="60dp"  
  8.         android:gravity="center_horizontal"   
  9.         android:layout_alignParentBottom="true" />  
  10.     <TextView android:id="@+id/menuname"  
  11.         android:layout_height="60dp"  
  12.         android:layout_width="60dp" android:singleLine="true"  
  13.         android:textSize="12dp"  android:textColor="#ff000000"  
  14.         android:paddingTop="40dp" android:gravity="center_horizontal"  
  15.         android:layout_alignParentBottom="true" />  
  16. </RelativeLayout>  
 

 

values/strings.xml:

 

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, PopMenu!</string>  
  4.     <string name="app_name">PopMenu</string>  
  5.     <string-array name="appnames">  
  6.         <item>新建文件夹</item>  
  7.         <item>新建文件</item>  
  8.         <item>粘贴</item>  
  9.         <item>搜索</item>  
  10.         <item>复制对话框</item>  
  11.         <item>APK管理</item>  
  12.         <item>设置</item>  
  13.         <item>图标</item>  
  14.         <item>文件库</item>  
  15.         <item>退出</item>  
  16.     </string-array>  
  17. </resources>  
 

 

做完这个感觉很多的动画效果都是“假的”,是做出来的一种效果。

分享到:
评论

相关推荐

    iOS 菜单 PopMenu.zip

    `PopMenu`的核心功能在于它的弹出动画效果。当用户触发某个事件时,菜单会以吸引人的方式从触发点弹出,增加用户的交互乐趣。这种设计不仅美观,还能帮助用户快速理解和操作菜单选项,提高应用的易用性。 在...

    ios-一个类似新浪微博的PopMenu.zip

    本项目“ios-一个类似新浪微博的PopMenu.zip”便是一个实现这一功能的示例,它基于Swift编程语言,采用自定义视图控件的方式,实现了弹出式菜单的效果。以下将详细介绍其中的关键知识点和实现过程。 首先,PopMenu...

    sina-popmenu, 高仿新浪微博弹框菜单.zip

    "sina-popmenu"是一款基于JavaScript编写的开源项目,其主要目标是复现新浪微博的弹出式菜单效果。该项目的核心在于模拟微博中下拉菜单的展示和隐藏,以及与用户交互时的各种动态效果,包括动画、响应式布局等。由于...

    popmenu.zip

    开发者可以通过查看并修改此文件,学习如何在自己的网页中实现相同的效果。 总结,"popmenu.zip"为开发者提供了一种快速创建鼠标点击弹出菜单的工具,通过简单的jQuery调用和自定义CSS,可以轻松地融入各种网页设计...

    QQ_PopMenu(iOS源代码)

    综上所述,QQ_PopMenu项目不仅展示了如何使用CoreGraphics进行自定义图形绘制,还涵盖了iOS应用开发中的视图层次、动画、用户交互等多个方面,是学习iOS图形编程和UI设计的宝贵资源。开发者可以通过深入研究这个项目...

    Android高级应用源码-博客里各个pop的源码,包括布局文件,popmenu,DefaultPop,和GridPop.zip

    本资源提供了Android高级应用中各种Pop的源码,包括布局文件、Popmenu、DefaultPop以及GridPop,这对于深入理解Android UI设计和自定义视图有着重要的学习价值。 首先,我们来了解一下`PopupWindow`。它是一个可以...

    popmenu:模仿ios系统ios-pop-menu菜单,底部弹出,伴有动画

    "popmenu"项目就是一个很好的实例,它模仿了iOS系统的ios-pop-menu菜单,这种菜单在用户交互时从底部弹出,并且带有流畅的动画效果,提升了用户体验。在HTML、CSS以及JavaScript等技术的加持下,开发者可以轻松地在...

    pop案例源码

    `popMenu`的源码分析和学习对于Android开发者来说是非常有价值的,它可以帮助理解Android UI组件的工作原理,同时也能提高在项目中实现高效、美观的`popMenu`的能力。 总之,这个"pop案例源码"提供了关于Android `...

    一个类似新浪微博的PopMenu

    在iOS应用开发中,用户界面的设计与交互是至关重要的,其中下拉菜单(PopMenu)是一种常见的组件,用于提供快捷的操作选项。...对于想要学习iOS UI设计和动画实现的开发者来说,HcdPopMenu是一个值得研究的案例。

    使用PopupWindow模仿UC底部导航Menu._android源码.zip

    通过学习和理解这段代码,我们可以更好地掌握`PopupWindow`的使用技巧,提高我们的Android开发能力。 总的来说,使用`PopupWindow`模仿UC底部导航菜单是一个典型的Android开发实践案例,它涉及到UI设计、事件监听、...

    一个很好用的web下拉式菜单插件

    通过查看和分析这个示例,开发者可以学习到如何在实际代码中正确地引入和应用插件,以及如何通过调整HTML和CSS来实现特定的布局和交互效果。 总的来说,jQuery PopMenu是一个强大且灵活的web下拉式菜单解决方案,...

    ios-HyPopMenuView(模仿新浪微博弹出菜单).zip

    《iOS中的HyPopMenuView:打造仿新浪微博弹出菜单》 在iOS应用开发中,用户界面的交互设计是至关重要的,而菜单作为交互...通过学习和使用这样的开源项目,开发者可以不断深化对iOS开发的理解,提高自己的编程技能。

    用PopupWindow自定义系统菜单

    在Android开发中,`PopupMenu`是一个非常实用的组件,它允许开发者在用户点击某一控件时弹出一个下拉菜单,通常用于实现类似系统菜单的功能。...通过学习和掌握这些知识,开发者可以更加自如地构建满足需求的应用程序。

    ios-模仿QQ点击下拉菜单.zip

    这个压缩包“ios-模仿QQ点击下拉菜单.zip”包含了一个名为“QQ_PopMenu_Demo”的示例项目,它展示了如何在iOS应用中实现类似QQ的下拉菜单效果。 首先,我们要理解QQ下拉菜单的基本功能。它通常位于屏幕底部,当用户...

    一款酷酷且可定制的弹出层for iOS

    通过高度定制,开发者可以根据自己的应用风格和用户需求调整弹出层的颜色、形状、动画效果等。 项目名称中的"PopMenu"暗示了这是一个关于弹出菜单的实现。在iOS开发中,我们可以使用各种技术来创建这样的组件,如...

    QListWidgetd

    `QListWidget`是Qt库中的一个控件,用于展示一系列可选的列表项。它是一种用户界面元素,常用于创建简单的...对于初学者来说,`QListWidget`是一个很好的起点,因为它提供了一个直观的方式来学习Qt的UI编程和事件处理。

    ios-仿QQ弹出菜单.zip

    通过学习和实践这个"QQ_PopMenu_Demo"项目,开发者可以掌握如何在自己的iOS应用中实现类似的弹出菜单功能,提高应用的交互性和用户友好性。同时,这也是一种锻炼自定义视图动画和用户界面设计的好方法。

    swift-仿微信点击“”号的菜单弹出视图

    在Swift编程中,仿微信点击“...”号的菜单弹出视图是一种常见的用户界面设计,主要用于展示更多操作选项。这种设计模式提高了用户体验,因为用户可以轻松...在实践中不断学习和探索,将有助于提升你的iOS开发技能。

    jQuery插件jQueryPopMenu点击按钮弹出悬浮九宫格菜单特效

    这个特效为用户界面增加了互动性和...通过学习和理解jQueryPopMenu插件的工作原理,开发者可以借鉴其设计思路,为自己的项目创建类似的交互效果,提高用户体验。同时,这也是提升JavaScript和jQuery技能的一个好案例。

Global site tag (gtag.js) - Google Analytics