自定义仿优酷界面
来源:互联网 发布:snmp数据采集 编辑:程序博客网 时间:2024/05/21 15:43
仿界面,重要的是实现思想
1.属性动画实现旋转
/** * 抽取动画效果 * * @param view 需要设定动画的控件 * @param delay 延时时间 * @param startAngle 开始的角度 * @param endAngle 结束的角度 */ private static void animationDelayStart(View view, long delay, float startAngle, float endAngle) { view.setPivotX(view.getWidth() / 2);//通过设定X旋转点将图片以这个点旋转 view.setPivotY(view.getHeight());//通过设定Y旋转点将图片以这个点旋转 //以设定的旋转点进行转动 ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "rotation", startAngle, endAngle); //设定延时 objectAnimator.setStartDelay(delay); //设定动画时间 objectAnimator.setDuration(500); //设定动画监听事件 objectAnimator.addListener(new myListener()); //开始动画 objectAnimator.start(); }
2.重写menu,实现他的三级联动
/** * 这是获取menu键的方式2 * * @param keyCode * @param event * @return */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_MENU: if (MyObjectAnimationUtil.getCount()) { return false; } if (isMenuVisiable) { //判断条目有几个 if (!is3Visiable) { MyObjectAnimationUtil.hide(rlMenu02); MyObjectAnimationUtil.hide(rlMenu01, 250); } else if (!isVisiable) { MyObjectAnimationUtil.hide(rlMenu01); } else { MyObjectAnimationUtil.hide(rlMenu03); MyObjectAnimationUtil.hide(rlMenu02, 250); MyObjectAnimationUtil.hide(rlMenu01, 500); } } else {//如果flase 就将所有的条目显示出来 MyObjectAnimationUtil.show(rlMenu01); MyObjectAnimationUtil.show(rlMenu02, 250); MyObjectAnimationUtil.show(rlMenu03, 500); //如果已经都隐藏设定所有的boolean值为true isVisiable = true; is3Visiable = true; } isMenuVisiable = !isMenuVisiable; break; } return true; }
3.动画监听记录当下时间正在进行的动画数目
//定义一个 值用来记录正在运行的动画的数量 private static int count = 0; //如果动画数量大于0,那就在调用的时候return; public static boolean getCount() { return count > 0; } /** * 动画的监听事件,重写他的四个方法 */ private static class myListener implements Animator.AnimatorListener { @Override public void onAnimationStart(Animator animation) { count++;//如果开始动画count++ } @Override public void onAnimationEnd(Animator animation) { count--;//如果结束动画count++ } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }
布局设置
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.oblivion.defineview.MainActivity"> <RelativeLayout android:id="@+id/rl_menu03" android:layout_width="320dp" android:layout_height="160dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@mipmap/level3"> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_marginBottom="10dp" android:layout_marginLeft="13dp" android:background="@mipmap/channel1" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_marginBottom="60dp" android:layout_marginLeft="33dp" android:background="@mipmap/channel2" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_marginBottom="100dp" android:layout_marginLeft="73dp" android:background="@mipmap/channel3" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="@mipmap/channel4" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_marginBottom="10dp" android:layout_marginRight="13dp" android:layout_alignParentRight="true" android:background="@mipmap/channel7" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="60dp" android:layout_marginRight="33dp" android:background="@mipmap/channel5" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="100dp" android:layout_marginRight="73dp" android:background="@mipmap/channel6" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_menu02" android:layout_width="210dp" android:layout_height="105dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@mipmap/level2"> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_marginBottom="10dp" android:layout_marginLeft="13dp" android:background="@mipmap/icon_search" /> <Button android:id="@+id/bt_menu02" android:layout_width="35dp" android:layout_height="35dp" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:background="@mipmap/icon_menu" /> <Button android:layout_width="35dp" android:layout_height="35dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="10dp" android:layout_marginRight="13dp" android:background="@mipmap/icon_myyouku" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_menu01" android:layout_width="120dp" android:layout_height="60dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@mipmap/level1"> <Button android:id="@+id/bt_menu01" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginTop="20dp" android:layout_centerInParent="true" android:background="@mipmap/icon_home" /> </RelativeLayout></RelativeLayout>
所有的源码部分
package com.oblivion.defineview;import android.animation.ObjectAnimator;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.util.Property;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.RotateAnimation;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.Toast;import butterknife.Bind;import butterknife.ButterKnife;import butterknife.OnClick;public class MainActivity extends AppCompatActivity { @Bind(R.id.rl_menu03) RelativeLayout rlMenu03; @Bind(R.id.bt_menu02) Button btMenu02; @Bind(R.id.rl_menu02) RelativeLayout rlMenu02; @Bind(R.id.bt_menu01) Button btMenu01; @Bind(R.id.rl_menu01) RelativeLayout rlMenu01; //设定三级联动的boolean private boolean isVisiable = true; private boolean is3Visiable = true; private boolean isMenuVisiable = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } /** * 这是一种获取menu键的方式1 * @param featureId * @param menu * @return */ /* @Override public boolean onMenuOpened(int featureId, Menu menu) { Toast.makeText(MainActivity.this, "test", Toast.LENGTH_SHORT).show(); return true; }*/ /** * 这是获取menu键的方式2 * * @param keyCode * @param event * @return */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_MENU: if (MyObjectAnimationUtil.getCount()) { return false; } if (isMenuVisiable) { //判断条目有几个 if (!is3Visiable) { MyObjectAnimationUtil.hide(rlMenu02); MyObjectAnimationUtil.hide(rlMenu01, 250); } else if (!isVisiable) { MyObjectAnimationUtil.hide(rlMenu01); } else { MyObjectAnimationUtil.hide(rlMenu03); MyObjectAnimationUtil.hide(rlMenu02, 250); MyObjectAnimationUtil.hide(rlMenu01, 500); } } else {//如果flase 就将所有的条目显示出来 MyObjectAnimationUtil.show(rlMenu01); MyObjectAnimationUtil.show(rlMenu02, 250); MyObjectAnimationUtil.show(rlMenu03, 500); //如果已经都隐藏设定所有的boolean值为true isVisiable = true; is3Visiable = true; } isMenuVisiable = !isMenuVisiable; break; } return true; } @OnClick({R.id.rl_menu03, R.id.bt_menu02, R.id.rl_menu02, R.id.bt_menu01, R.id.rl_menu01}) public void onClick(View view) { switch (view.getId()) { case R.id.bt_menu02: if (MyObjectAnimationUtil.getCount()) { return; } if (is3Visiable) { //隐藏界面3 MyObjectAnimationUtil.hide(rlMenu03); } else { //显示界面3 MyObjectAnimationUtil.show(rlMenu03); } is3Visiable = !is3Visiable; // MyAnimationUtils.hide(); break; case R.id.bt_menu01: if (MyObjectAnimationUtil.getCount()) { return; } if (isVisiable) { //隐藏界面2,3 if (!is3Visiable) { //如果界面三已经隐藏,只设定2隐藏 MyObjectAnimationUtil.hide(rlMenu02); is3Visiable = !is3Visiable; isVisiable = !isVisiable; return; } MyObjectAnimationUtil.hide(rlMenu02, 250); MyObjectAnimationUtil.hide(rlMenu03); } else { //显示界面2,3 MyObjectAnimationUtil.show(rlMenu02); MyObjectAnimationUtil.show(rlMenu03, 250); } isVisiable = !isVisiable; break; } }}
简单工具类源码部分
package com.oblivion.defineview;import android.animation.Animator;import android.animation.ObjectAnimator;import android.view.View;/** * Created by oblivion on 2016/10/21. */public class MyObjectAnimationUtil { public static void hide(View view) { animationDelayStart(view, 0, 0f, -180f); } public static void show(View view) { animationDelayStart(view, 0, -180f, 0f); } public static void hide(View view, long delay) { animationDelayStart(view, delay, 0f, -180f); } public static void show(View view, long delay) { animationDelayStart(view, delay, -180f, 0f); } /** * 抽取动画效果 * * @param view 需要设定动画的控件 * @param delay 延时时间 * @param startAngle 开始的角度 * @param endAngle 结束的角度 */ private static void animationDelayStart(View view, long delay, float startAngle, float endAngle) { view.setPivotX(view.getWidth() / 2);//通过设定X旋转点将图片以这个点旋转 view.setPivotY(view.getHeight());//通过设定Y旋转点将图片以这个点旋转 //以设定的旋转点进行转动 ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "rotation", startAngle, endAngle); //设定延时 objectAnimator.setStartDelay(delay); //设定动画时间 objectAnimator.setDuration(500); //设定动画监听事件 objectAnimator.addListener(new myListener()); //开始动画 objectAnimator.start(); } //定义一个 值用来记录正在运行的动画的数量 private static int count = 0; //如果动画数量大于0,那就在调用的时候return; public static boolean getCount() { return count > 0; } /** * 动画的监听事件,重写他的四个方法 */ private static class myListener implements Animator.AnimatorListener { @Override public void onAnimationStart(Animator animation) { count++;//如果开始动画count++ } @Override public void onAnimationEnd(Animator animation) { count--;//如果结束动画count++ } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }}
github源码地址
0 0
- 自定义仿优酷界面
- 自定义二维码扫描界面 自定义
- Domino 自定义登陆界面
- 如何自定义RCP界面
- AlertDialog 自定义界面
- InstallShield 自定义安装界面
- 自定义Thunderbird界面字体
- Flex自定义Loading界面
- todolist自定义界面
- InstallShield自定义安装界面
- 自定义View界面大合集
- InstallShield自定义安装界面
- InstallShield自定义安装界面
- 自定义MPMoviePlayerController的界面
- 自定义形状界面MFC
- Qt 制作自定义界面
- vc自定义界面
- 自定义照相机拍照界面
- 1005. 继续(3n+1)猜想 (25)——sort(a,b,cmp)
- 用 Docker 发布来一个 Nginx+Spring Boot+MongoDB应用
- 多点触摸时ACTION_POINTER_UP和ACTION_UP冲突问题
- Sublime Text 3 快捷键总结(拿走)
- Bootstrap 简介
- 自定义仿优酷界面
- jquery总结
- 编程作业:简单的学生管理系统
- WAP面经 live coding
- OpenCV-Python[第一章]——开发环境搭建(Windows)
- Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架
- 【Android 应用开发】GitHub 优秀的 Android 开源项目
- Bootstrap 简介
- 【Spring MVC】 学习笔记