仿网易下拉菜单,UC底部弹出菜单(带动画效果,讲解原理)
2015-01-17 18:33
471 查看
首先看看效果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201501/035c4b5480186757dc88275c5d24ded0)
实现该效果,我们想要的是
1. 布局自定义,修改简单
2.代码简单,容易控制,学习成本低
OK,以上2个条件都满足。
来看如何实现。首先这种操作是用了动画效果,动画文件需要2个,第一个显示,第二个隐藏。全部放在res/anim 目录下
首先看进入代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="-100%"
android:fillAfter="true"
android:toYDelta="0%" />
</set>
fromYdelta 设置为 -100% 指的是以现在位置为基准线,让自己位置在上面。画个图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201501/6a1824c6b40b35d084519ebaf4ae0694)
注意我写的是对应的方框的底部来说的,注意是0% 而不是100% 这里面也是因为布局的时候,要弹出,显示的UI是 0%的状态。
来看缩回的代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="0%"
android:fillAfter="true"
android:toYDelta="-100%" />
</set>
fromYDelta起点当然是0%了
OK,你如果真的明白以上我表达的意思,那接下来的代码不看也罢,就是简单的View.setAnimation() 而已了
全部贴出来吧
首先布局文件,注意一定把该布局设置为 android:visiability="gone" 这样用户不会点击到
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- 弹出/缩回的布局 -->
<RelativeLayout android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="200dip"
android:background="#00ff00"
android:layout_below="@+id/top"
android:visibility="gone"
>
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/a"/>
</RelativeLayout>
<!-- title -->
<RelativeLayout android:id="@+id/top"
android:layout_width="fill_parent"
android:layout_height="100dip"
android:background="#000000">
<Button android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="下垃菜单"/>
</RelativeLayout>
代码:
/**
*
* 仿网易下拉菜单
*
* @author Lq
*/
public class PullAndUpMenuActivity extends Activity{
private Button mBtn;
private RelativeLayout mLayout;
private boolean isShow =false;
private Animation animEnter = null;
private Animation animExit = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
mBtn = (Button) findViewById(R.id.btn);
mBtn.setOnClickListener(onMenuClickListener);
mLayout = (RelativeLayout) findViewById(R.id.layout);
animEnter = AnimationUtils.loadAnimation(this, R.anim.vertical_enter);
animExit = AnimationUtils.loadAnimation(this, R.anim.vertical_exit);
}
OnClickListener onMenuClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if(!isShow){
performAnimateOn();
}else{
performAnimateOff();
}
}
};
private void performAnimateOn() {
mLayout.setAnimation(animEnter);
animEnter.start();
mLayout.setVisibility(View.VISIBLE);
isShow = true;
}
private void performAnimateOff() {
mLayout.setAnimation(animExit);
animExit.start();
mLayout.setVisibility(View.GONE);
isShow = false;
}
}
接下来说说UC的吧,来看看图。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201501/41df45c60829b284e2ee3eb34ba99426)
好了,如果你看懂了,那么你就会了。
实现该效果,我们想要的是
1. 布局自定义,修改简单
2.代码简单,容易控制,学习成本低
OK,以上2个条件都满足。
来看如何实现。首先这种操作是用了动画效果,动画文件需要2个,第一个显示,第二个隐藏。全部放在res/anim 目录下
首先看进入代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="-100%"
android:fillAfter="true"
android:toYDelta="0%" />
</set>
fromYdelta 设置为 -100% 指的是以现在位置为基准线,让自己位置在上面。画个图
注意我写的是对应的方框的底部来说的,注意是0% 而不是100% 这里面也是因为布局的时候,要弹出,显示的UI是 0%的状态。
来看缩回的代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="0%"
android:fillAfter="true"
android:toYDelta="-100%" />
</set>
fromYDelta起点当然是0%了
OK,你如果真的明白以上我表达的意思,那接下来的代码不看也罢,就是简单的View.setAnimation() 而已了
全部贴出来吧
首先布局文件,注意一定把该布局设置为 android:visiability="gone" 这样用户不会点击到
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- 弹出/缩回的布局 -->
<RelativeLayout android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="200dip"
android:background="#00ff00"
android:layout_below="@+id/top"
android:visibility="gone"
>
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/a"/>
</RelativeLayout>
<!-- title -->
<RelativeLayout android:id="@+id/top"
android:layout_width="fill_parent"
android:layout_height="100dip"
android:background="#000000">
<Button android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="下垃菜单"/>
</RelativeLayout>
代码:
/**
*
* 仿网易下拉菜单
*
* @author Lq
*/
public class PullAndUpMenuActivity extends Activity{
private Button mBtn;
private RelativeLayout mLayout;
private boolean isShow =false;
private Animation animEnter = null;
private Animation animExit = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
mBtn = (Button) findViewById(R.id.btn);
mBtn.setOnClickListener(onMenuClickListener);
mLayout = (RelativeLayout) findViewById(R.id.layout);
animEnter = AnimationUtils.loadAnimation(this, R.anim.vertical_enter);
animExit = AnimationUtils.loadAnimation(this, R.anim.vertical_exit);
}
OnClickListener onMenuClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if(!isShow){
performAnimateOn();
}else{
performAnimateOff();
}
}
};
private void performAnimateOn() {
mLayout.setAnimation(animEnter);
animEnter.start();
mLayout.setVisibility(View.VISIBLE);
isShow = true;
}
private void performAnimateOff() {
mLayout.setAnimation(animExit);
animExit.start();
mLayout.setVisibility(View.GONE);
isShow = false;
}
}
接下来说说UC的吧,来看看图。
好了,如果你看懂了,那么你就会了。
相关文章推荐
- SpringAnimation 实现菜单从顶部弹出从底部消失动画效果
- 仿自下向上动画弹出菜单(同时背景窗口变暗/缩小)的实现原理,例小米,苹果等菜单
- Activity覆盖效果,可以用于底部弹出菜单。
- 滑动scrollview时,随距离改变属性的动画原理!(类似陌陌,网易,path个人属性界面的动画效果)
- android开发游记:弹出窗和底部弹出窗的实现和动画效果
- Android 毛玻璃效果弹出菜单动画
- Android仿网易严选底部弹出菜单效果
- Android Activity 淡入淡出和从底部向上弹出动画效果【转】
- Android Activity 淡入淡出和从底部向上弹出动画效果
- android开发游记:弹出窗和底部弹出窗的实现和动画效果
- Android安卓用Dialog对话框简单并且完美实现popupWindow底部弹出效果,有动画效果
- 使用popupWinow做出底部弹出菜单的效果
- android 动画效果 translate 详解,包括 Dialog 上方弹出,底部弹出,中间弹出
- 安卓底部导航栏菜单弹出属性动画
- [置顶] Android Activity 淡入淡出和从底部向上弹出动画效果
- 自定义Dialog对话框并实现从底部弹出的动画效果
- 仿网易nec首页动画效果(实现原理+代码)
- Android自定义View之实现流行的新浪微博底部菜单:高仿“咸鱼APP”的底部菜单动画效果。
- Android Activity 淡入淡出和从底部向上弹出动画效果
- JS动画效果文字慢慢放大的菜单代码