自定义仿优酷界面

来源:互联网 发布: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
原创粉丝点击