PopMenu效果的学习
看到很多的程序里面都用了PopMenu的效果,给人的体验非常好,今天也学着做了一个,效果如下:
PopMenu.java
- public class PopMenu extends Activity {
- private int SCREEN_WIDTH;
- private int SCREEN_HEIGHT;
- private final static int MENU_CREATE_DIRECTORY = 0;
- private final static int MENU_CREATE_FILE = 1;
- private final static int MENU_PASTE = 2;
- public final static int MENU_SEARCH = 3;
- private final static int MENU_SHOW_COPY_DIALOG = 4;
- private final static int MENU_APK_MANAGER = 5;
- private final static int MENU_SETTING = 6;
- private final static int MENU_SET_VIEW_STYLE = 7;
- private final static int MENU_FILE_LIB = 8;
- private final static int MENU_FINISH_ACTIVITY = 9;
- private LinearLayout appMenu;
- private Animation menuShowAnimation;
- private Animation menuHideAnimation;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- SCREEN_WIDTH = getResources().getDisplayMetrics().widthPixels;
- SCREEN_HEIGHT = getResources().getDisplayMetrics().heightPixels;
- initAppMenu();
- }
- private void initAppMenu() {
- appMenu = (LinearLayout) findViewById(R.id.appMenu);
- LinearLayout row = (LinearLayout) appMenu.findViewById(R.id.appRow1);
- int[] drRes = { R.drawable.newfolder, R.drawable.newfile,
- R.drawable.paste, R.drawable.search, R.drawable.dialog,
- R.drawable.apkmanager, R.drawable.setting, R.drawable.multicon,
- R.drawable.filelib, R.drawable.close };
- String[] names = getResources().getStringArray(R.array.appnames);
- LayoutInflater inflater = getLayoutInflater();
- View.OnClickListener listener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- appMenuOnClick(v.getId());
- hideAppMenu();
- }
- };
- for (int i = 0; i < 10; i++) {
- if (i == 5) {
- row = (LinearLayout) appMenu.findViewById(R.id.appRow2);
- }
- RelativeLayout rowItem = (RelativeLayout) inflater.inflate(
- R.layout.appmenuitem, null);
- ImageButton icon = (ImageButton) rowItem
- .findViewById(R.id.menuicon);
- TextView name = (TextView) rowItem.findViewById(R.id.menuname);
- icon.setBackgroundResource(drRes[i]);
- icon.setId(i);
- name.setText(names[i]);
- icon.setOnClickListener(listener);
- row.addView(rowItem);
- }
- }
- private void appMenuOnClick(int whitch) {
- switch (whitch) {
- case MENU_CREATE_DIRECTORY:
- Toast.makeText(this, "Create Directory", Toast.LENGTH_LONG).show();
- break;
- case MENU_CREATE_FILE:
- Toast.makeText(this, "Create File", Toast.LENGTH_LONG).show();
- break;
- case MENU_PASTE:
- Toast.makeText(this, "Paste", Toast.LENGTH_LONG).show();
- break;
- case MENU_SEARCH:
- Toast.makeText(this, "Search", Toast.LENGTH_LONG).show();
- break;
- case MENU_FINISH_ACTIVITY:
- Toast.makeText(this, "Finish Activity", Toast.LENGTH_LONG).show();
- break;
- case MENU_SHOW_COPY_DIALOG:
- Toast.makeText(this, "Show Copy Dialog", Toast.LENGTH_LONG).show();
- break;
- case MENU_SETTING:
- Toast.makeText(this, "Setting", Toast.LENGTH_LONG).show();
- break;
- case MENU_SET_VIEW_STYLE:
- Toast.makeText(this, "Set View Style", Toast.LENGTH_LONG).show();
- break;
- default:
- break;
- }
- }
- @Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- int actiton = event.getAction();
- int code = event.getKeyCode();
- switch (code) {
- case KeyEvent.KEYCODE_MENU:
- if (actiton == KeyEvent.ACTION_DOWN) {
- if (appMenu.getVisibility() == View.INVISIBLE) {
- showAppMenu();
- } else {
- hideAppMenu();
- }
- }
- break;
- case KeyEvent.KEYCODE_BACK:
- if (appMenu.getVisibility() == View.INVISIBLE) {
- hideAppMenu();
- }
- break;
- default:
- break;
- }
- return super.dispatchKeyEvent(event);
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent event) {
- if (appMenu.getVisibility() == View.VISIBLE) {
- int y = (int) event.getRawY();
- if (y < SCREEN_HEIGHT - appMenu.getHeight()) {
- hideAppMenu();
- return true;
- }
- }
- return super.dispatchTouchEvent(event);
- }
- private void hideAppMenu() {
- appMenu.setVisibility(View.INVISIBLE);
- if (menuHideAnimation == null) {
- menuHideAnimation = AnimationUtils.loadAnimation(this,
- R.anim.menuhide);
- }
- appMenu.startAnimation(menuHideAnimation);
- }
- private void showAppMenu() {
- appMenu.setVisibility(View.VISIBLE);
- if (menuShowAnimation == null) {
- menuShowAnimation = AnimationUtils.loadAnimation(this,
- R.anim.menushow);
- }
- appMenu.startAnimation(menuShowAnimation);
- }
- }
res/anim中对于动画的控制:
menuhide.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate
- android:fromXDelta="0"
- android:toXDelta="0"
- android:fromYDelta="120"
- android:toYDelta="00"
- android:duration="200" />
- </set>
menushow.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate
- android:fromXDelta="0"
- android:toXDelta="0"
- android:fromYDelta="00"
- android:toYDelta="120"
- android:duration="200" />
- </set>
layout/main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView android:layout_width="fill_parent"
- android:layout_height="wrap_content" android:text="@string/hello" />
- <LinearLayout android:id="@+id/appMenu" android:layout_gravity="bottom"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="125dip" android:visibility="visible"
- android:background="@drawable/menubackground"
- android:layout_alignParentBottom="true">
- <LinearLayout android:id="@+id/appRow1"
- android:orientation="horizontal" android:gravity="center_horizontal"
- android:layout_gravity="center_horizontal" android:padding="2dip"
- android:layout_width="fill_parent" android:layout_height="60dip">
- </LinearLayout>
- <LinearLayout android:id="@+id/appRow2"
- android:orientation="horizontal" android:gravity="center_horizontal"
- android:layout_gravity="center_horizontal" android:padding="2dip"
- android:layout_width="fill_parent" android:layout_height="60dip">
- </LinearLayout>
- </LinearLayout>
- </RelativeLayout>
layout/appmenuitem.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="60dp"
- android:layout_width="60dp"
- android:gravity="center_horizontal">
- <ImageButton android:id="@+id/menuicon"
- android:layout_height="60dp" android:layout_width="60dp"
- android:gravity="center_horizontal"
- android:layout_alignParentBottom="true" />
- <TextView android:id="@+id/menuname"
- android:layout_height="60dp"
- android:layout_width="60dp" android:singleLine="true"
- android:textSize="12dp" android:textColor="#ff000000"
- android:paddingTop="40dp" android:gravity="center_horizontal"
- android:layout_alignParentBottom="true" />
- </RelativeLayout>
values/strings.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="hello">Hello World, PopMenu!</string>
- <string name="app_name">PopMenu</string>
- <string-array name="appnames">
- <item>新建文件夹</item>
- <item>新建文件</item>
- <item>粘贴</item>
- <item>搜索</item>
- <item>复制对话框</item>
- <item>APK管理</item>
- <item>设置</item>
- <item>图标</item>
- <item>文件库</item>
- <item>退出</item>
- </string-array>
- </resources>
做完这个感觉很多的动画效果都是“假的”,是做出来的一种效果。
分享到:
相关推荐
`PopMenu`的核心功能在于它的弹出动画效果。当用户触发某个事件时,菜单会以吸引人的方式从触发点弹出,增加用户的交互乐趣。这种设计不仅美观,还能帮助用户快速理解和操作菜单选项,提高应用的易用性。 在...
本项目“ios-一个类似新浪微博的PopMenu.zip”便是一个实现这一功能的示例,它基于Swift编程语言,采用自定义视图控件的方式,实现了弹出式菜单的效果。以下将详细介绍其中的关键知识点和实现过程。 首先,PopMenu...
"sina-popmenu"是一款基于JavaScript编写的开源项目,其主要目标是复现新浪微博的弹出式菜单效果。该项目的核心在于模拟微博中下拉菜单的展示和隐藏,以及与用户交互时的各种动态效果,包括动画、响应式布局等。由于...
开发者可以通过查看并修改此文件,学习如何在自己的网页中实现相同的效果。 总结,"popmenu.zip"为开发者提供了一种快速创建鼠标点击弹出菜单的工具,通过简单的jQuery调用和自定义CSS,可以轻松地融入各种网页设计...
综上所述,QQ_PopMenu项目不仅展示了如何使用CoreGraphics进行自定义图形绘制,还涵盖了iOS应用开发中的视图层次、动画、用户交互等多个方面,是学习iOS图形编程和UI设计的宝贵资源。开发者可以通过深入研究这个项目...
本资源提供了Android高级应用中各种Pop的源码,包括布局文件、Popmenu、DefaultPop以及GridPop,这对于深入理解Android UI设计和自定义视图有着重要的学习价值。 首先,我们来了解一下`PopupWindow`。它是一个可以...
"popmenu"项目就是一个很好的实例,它模仿了iOS系统的ios-pop-menu菜单,这种菜单在用户交互时从底部弹出,并且带有流畅的动画效果,提升了用户体验。在HTML、CSS以及JavaScript等技术的加持下,开发者可以轻松地在...
`popMenu`的源码分析和学习对于Android开发者来说是非常有价值的,它可以帮助理解Android UI组件的工作原理,同时也能提高在项目中实现高效、美观的`popMenu`的能力。 总之,这个"pop案例源码"提供了关于Android `...
在iOS应用开发中,用户界面的设计与交互是至关重要的,其中下拉菜单(PopMenu)是一种常见的组件,用于提供快捷的操作选项。...对于想要学习iOS UI设计和动画实现的开发者来说,HcdPopMenu是一个值得研究的案例。
通过学习和理解这段代码,我们可以更好地掌握`PopupWindow`的使用技巧,提高我们的Android开发能力。 总的来说,使用`PopupWindow`模仿UC底部导航菜单是一个典型的Android开发实践案例,它涉及到UI设计、事件监听、...
通过查看和分析这个示例,开发者可以学习到如何在实际代码中正确地引入和应用插件,以及如何通过调整HTML和CSS来实现特定的布局和交互效果。 总的来说,jQuery PopMenu是一个强大且灵活的web下拉式菜单解决方案,...
《iOS中的HyPopMenuView:打造仿新浪微博弹出菜单》 在iOS应用开发中,用户界面的交互设计是至关重要的,而菜单作为交互...通过学习和使用这样的开源项目,开发者可以不断深化对iOS开发的理解,提高自己的编程技能。
在Android开发中,`PopupMenu`是一个非常实用的组件,它允许开发者在用户点击某一控件时弹出一个下拉菜单,通常用于实现类似系统菜单的功能。...通过学习和掌握这些知识,开发者可以更加自如地构建满足需求的应用程序。
这个压缩包“ios-模仿QQ点击下拉菜单.zip”包含了一个名为“QQ_PopMenu_Demo”的示例项目,它展示了如何在iOS应用中实现类似QQ的下拉菜单效果。 首先,我们要理解QQ下拉菜单的基本功能。它通常位于屏幕底部,当用户...
通过高度定制,开发者可以根据自己的应用风格和用户需求调整弹出层的颜色、形状、动画效果等。 项目名称中的"PopMenu"暗示了这是一个关于弹出菜单的实现。在iOS开发中,我们可以使用各种技术来创建这样的组件,如...
`QListWidget`是Qt库中的一个控件,用于展示一系列可选的列表项。它是一种用户界面元素,常用于创建简单的...对于初学者来说,`QListWidget`是一个很好的起点,因为它提供了一个直观的方式来学习Qt的UI编程和事件处理。
通过学习和实践这个"QQ_PopMenu_Demo"项目,开发者可以掌握如何在自己的iOS应用中实现类似的弹出菜单功能,提高应用的交互性和用户友好性。同时,这也是一种锻炼自定义视图动画和用户界面设计的好方法。
在Swift编程中,仿微信点击“...”号的菜单弹出视图是一种常见的用户界面设计,主要用于展示更多操作选项。这种设计模式提高了用户体验,因为用户可以轻松...在实践中不断学习和探索,将有助于提升你的iOS开发技能。
这个特效为用户界面增加了互动性和...通过学习和理解jQueryPopMenu插件的工作原理,开发者可以借鉴其设计思路,为自己的项目创建类似的交互效果,提高用户体验。同时,这也是提升JavaScript和jQuery技能的一个好案例。