zoukankan      html  css  js  c++  java
  • 动画效果

    1. 透明动画 按钮透明

    ① 用代码控制

    创建一个按钮

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1">
    
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/btnClickMe" />
    </LinearLayout>
    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    // 透明动画 透明效果从 0->1
                    AlphaAnimation aa = new AlphaAnimation(0, 1);
                    aa.setDuration(1000);  // 时间设置 1s
                    v.startAnimation(aa);  // 把按钮设置改动画
                }
            });
            System.out.println("onCreate");
        }
    }

    ② 用 anim目录下面的xml配置文件来实现

    在 res/anim/aa.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <!-- fromAlpha从0   toAlpha到1 duration时间1s-->
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromAlpha="0" 
        android:toAlpha="1"
        android:duration="1000"
        />
    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    /*// 透明动画 透明效果从 0->1
                    AlphaAnimation aa = new AlphaAnimation(0, 1);
                    aa.setDuration(1000);  // 时间设置 1s
                    v.startAnimation(aa);  // 把按钮设置改动画*/
                    
                    // 用配置文件来实现
                    v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.aa));
                }
            });
            System.out.println("onCreate");
        }
    }

    2. 旋转动画

    视图界面 -- 一个按钮

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/btnClickMe"
            android:layout_centerVertical="true"
            android:layout_alignParentStart="true" />
    
    </RelativeLayout>

    ①直接使用java代码

    public class MainActivity extends Activity{
    
        private RotateAnimation ra = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //ra = new RotateAnimation(0, 360); // 默认从0,0 旋转360度
            //ra = new RotateAnimation(0, 360 ,10, 10); // 从 10,10 旋转360度
            ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            ra.setDuration(1000); //时间 1s
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    v.startAnimation(ra);   //用代码
    
                    
                }
            });
            System.out.println("onCreate");
        }
    }

    ② 用配置文件 xml    /res/anim/rotate.xml

    <?xml version="1.0" encoding="utf-8"?>
    <rotate
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:toDegrees="360"
        android:duration="1000"
        android:pivotX="50%"
        android:pivotY="50%"
         />

    java代码

    public class MainActivity extends Activity{
    
        private RotateAnimation ra = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    //用xml文件
                    v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.rotate));
                }
            });
            System.out.println("onCreate");
        }
    }

    3. 移动动画

    视图----- 一个按钮

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/btnClickMe"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    
    </RelativeLayout>

    ① 直接用java

    public class MainActivity extends Activity{
    
    
        private TranslateAnimation ta = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ta = new TranslateAnimation(0, 200, 0, 200);  // x + 200  y+200
            ta.setDuration(1000);// 1s 时间
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    v.startAnimation(ta);
                }
            });
            System.out.println("onCreate");
        }
    }
    

    ② anim/translate.xml 文件

    <?xml version="1.0" encoding="utf-8"?>
    <translate android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="200"
        android:toYDelta="200"
        android:duration="1000"
        xmlns:android="http://schemas.android.com/apk/res/android" />
    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    // 调用配置文件 执行
                    v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.translate));
                }
            });
            System.out.println("onCreate");
        }
    }

    4.缩放

    视图 按钮

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/btnClickMe"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    
    </RelativeLayout>

    ① 直接用java

    public class MainActivity extends Activity{
    
        private ScaleAnimation sa;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //sa = new ScaleAnimation(0, 1, 0, 1);//缩放比例 从0到1 (完整)
            //sa = new ScaleAnimation(0, 1, 0, 1, 100, 100); // 从x=100 y=100开始缩放
            sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 相对于自己的中心点来缩放
            sa.setDuration(1000);
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    v.startAnimation(sa);
    
                }
            });
            System.out.println("onCreate");
        }
    }

    ② 使用配置文件

    anim/scale.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <scale android:fromXScale="0"
        android:toXScale="1"
        android:fromYScale="0"
        android:toYScale="1"
        android:duration="1000"
        android:pivotY="50%"
        android:pivotX="50%"
        xmlns:android="http://schemas.android.com/apk/res/android" />
    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    // 使用配置文件
                    v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.scale));
    
                }
            });
            System.out.println("onCreate");
        }
    }

    5. 混合, 透明加移动

    视图 一个按钮

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/btnClickMe"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    
    </RelativeLayout>

    ① 直接用java

    public class MainActivity extends Activity{
    
        private AnimationSet as = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            as = new AnimationSet(true);  // 动画容器 把要走的动画添加进去
            as.setDuration(1000);
    
            AlphaAnimation aa = new AlphaAnimation(0 ,1); //透明
            aa.setDuration(1000);
            as.addAnimation(aa);  //添加到容器里面
    
            TranslateAnimation ta = new TranslateAnimation(200, 0, 200, 0);  //移动
            ta.setDuration(1000);
            as.addAnimation(ta);  //添加到容器里面
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    // 使用配置文件
    
                    v.startAnimation(as);
                }
            });
            System.out.println("onCreate");
        }
    }

    ② 用配置文件 anim/animationset.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:shareInterpolator="true"
        >
        <translate android:fromXDelta="200"
            android:fromYDelta="200"
            android:toYDelta="0"
            android:toXDelta="0"
            ></translate>
    
        <alpha android:fromAlpha="0" android:toAlpha="1"></alpha>
    </set>
    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    // 使用配置文件
                    v.startAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.animationset));
                }
            });
            System.out.println("onCreate");
        }
    }

    6. 动画监听

    // 从配置文件获取 动画对象
                    Animation a = AnimationUtils.loadAnimation(v.getContext(), R.anim.animationset);
                    a.setAnimationListener(new Animation.AnimationListener() {  //监听
                        @Override
                        public void onAnimationStart(Animation animation) {  //动画开始的时候
                            Toast.makeText(MainActivity.this, "动画开始", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onAnimationEnd(Animation animation) {    //动画结束的时候
                            Toast.makeText(MainActivity.this, "动画结束", Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onAnimationRepeat(Animation animation) { // 当动画重复时调用
                        }
                    });
                    v.startAnimation(a);

    7. 自定义动画

    创建我们自定义动画的类,CustomAnim类

    /**
     * Created by ZhouXiaoHai on 2016/9/23.
     */
    public class CustomAnim extends Animation {
    
    
    
        // 这个方法能得到 该组件的宽度 长度 , 父组件的宽度 长度
        @Override
        public void initialize(int width, int height, int parentWidth, int parentHeight) {
            super.initialize(width, height, parentWidth, parentHeight);
        }
    
        // applyTransformation 不停的自动执行这个方法
        // interpolatedTime 补间时间 0->1 从零到一 这个方法会不停的执行
        // Transformation 变化对象
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
    
            //t.getMatrix().setTranslate(200* interpolatedTime, 200*interpolatedTime); //移动到一个位置
            //t.setAlpha(interpolatedTime);  // 透明效果
    
            // (Math.sin(interpolatedTime*10)*50) 这个值 是周期摆动的
            t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime*10)*50), 0 );  // 两边摆动
            super.applyTransformation(interpolatedTime, t);
        }
    }
    public class MainActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            // R.id.btnClickMe 是一个按钮
            this.findViewById(R.id.btnClickMe).setOnClickListener(new View.OnClickListener() { //按钮点击监听
                @Override
                public void onClick(View v) {
                    // 从配置文件获取 动画对象
                    Animation a = new CustomAnim();
                    a.setDuration(1000);
                    v.startAnimation(a);
    
                }
            });
            System.out.println("onCreate");
        }
    }
  • 相关阅读:
    Java 内部类
    Java 包 和导入
    Java 访问控制权限
    java 面向对象-- this 关键字
    java 面向对象-- 构造方法
    java 用递归函数实现斐波那契数列 1、1、2、3、5、8、13、21
    Java面向对象-static静态方法与普通方法
    常用模块(time)
    模块安装及导入
    python之OS模块详解
  • 原文地址:https://www.cnblogs.com/shaoshao/p/5898206.html
Copyright © 2011-2022 走看看