Android自己定义控件:老版优酷的三级菜单(效果图 + Demo)
2016-01-10 16:50
483 查看
效果图:
制作思路:
1、先分析这个效果,事实上能够理解为把三级菜单分成level1,level2,level3,level1是始终显示的。
点击level1后,level2会出现;点击level2后,level3会出现;level2,level3出现后,点击level1,level2和level3都会消失。
然后消失和出现我们用到了一个动画效果。
2、动画效果用到的是RotateAnimation。因为我们都是用同一个效果,那么我们仅仅要写一个类,把效果实现了就能够了。要是使用RotateAnimation的话。我们会不断的复用一些代码,这样开发的效率会比較低。
3、RotateAnimation的旋转进入和旋转出去是个坑——由于他是在X轴顺时针方向旋转的。大家能够看看图:
总体思路就是这样,接下来就是一些操作了:
代码:
1、MyAnimation类:
2、MainActivity类:
源代码下载
制作思路:
1、先分析这个效果,事实上能够理解为把三级菜单分成level1,level2,level3,level1是始终显示的。
点击level1后,level2会出现;点击level2后,level3会出现;level2,level3出现后,点击level1,level2和level3都会消失。
然后消失和出现我们用到了一个动画效果。
2、动画效果用到的是RotateAnimation。因为我们都是用同一个效果,那么我们仅仅要写一个类,把效果实现了就能够了。要是使用RotateAnimation的话。我们会不断的复用一些代码,这样开发的效率会比較低。
3、RotateAnimation的旋转进入和旋转出去是个坑——由于他是在X轴顺时针方向旋转的。大家能够看看图:
总体思路就是这样,接下来就是一些操作了:
代码:
1、MyAnimation类:
public class MyAnimation{ public static void animationIn(View view){ animationIn(view,0); } public static void animationOut(View view){ animationOut(view,0); } public static void animationIn(View view,long delay){ RotateAnimation animation = new RotateAnimation(180, 360, view.getWidth()/2, view.getHeight()); animation.setDuration(500); animation.setFillAfter(true); animation.setStartOffset(delay); view.startAnimation(animation); } public static void animationOut(View view,long delay){ RotateAnimation animation = new RotateAnimation(0, 180, view.getWidth()/2, view.getHeight()); animation.setDuration(500); animation.setFillAfter(true); animation.setStartOffset(delay); view.startAnimation(animation); } }
2、MainActivity类:
public class MainActivity extends Activity implements OnClickListener{ private boolean isLevel2showed,isLevel3showed; private RelativeLayout level1,level2,level3; private ImageButton home,menu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); isLevel2showed = false; isLevel3showed = false; initLayout(); initImageButton(); } public void initLayout() { level1 = (RelativeLayout)findViewById(R.id.relate_level1); level2 = (RelativeLayout)findViewById(R.id.relate_level2); level3 = (RelativeLayout)findViewById(R.id.relate_level3); level2.setVisibility(View.INVISIBLE); level3.setVisibility(View.INVISIBLE); } public void initImageButton() { home = (ImageButton)level1.findViewById(R.id.home); menu = (ImageButton)level2.findViewById(R.id.menu); home.setOnClickListener(this); menu.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.home: if(!isLevel2showed){ isLevel2showed = true; MyAnimation.animationIn(level2); }else if(!isLevel3showed){ isLevel2showed = false; MyAnimation.animationOut(level2); }else{ isLevel2showed = false; isLevel3showed = false; MyAnimation.animationOut(level3); MyAnimation.animationOut(level2,500); } break; case R.id.menu: if(!isLevel3showed){ isLevel3showed = true; MyAnimation.animationIn(level3); }else{ isLevel3showed = false; MyAnimation.animationOut(level3); } break; } } }
源代码下载
相关文章推荐
- (七)Android中AIDL的应用与理解
- android 中spinner 三级联动
- Android数据存储之SQLite使用
- toolbar 基本用法(Android studio中测试)
- Android中使用shape来定义控件
- Android 修改 Toolbar 高度
- Android-隐式Intent的区别
- android:windowSoftInputMode属性介绍
- Android中ListView结合CheckBox实现数据批量选择(全选、反选、全不选)
- android的新闻显示。
- 总结2015
- Android点击Button水波纹效果
- 自定义录像机 没任何新意
- Android系统更改状态栏字体颜色
- android中通过ContentResolver获取媒体资源
- 东拼西凑写的android 相机例子,包含一些遇到的坑
- Android 的消息机制
- Android如何导入已有的外部数据库
- Android数据存储之SQLite使用
- Android Camera 找出屏幕的最佳尺寸大小