如何使用GridLayoutAnimation实现gridView加载动画
2017-04-01 20:38
381 查看
在上一篇的博客中介绍了,如何使用LayoutAnimationController实现ListView的加载动画(当然我只是用了在xml加载动画的方式),在本篇博客中,我将使用java代码加载GridLayoutAnimationController来实现GridView的加载动画,这两个的加载动画类似,其实也可以理解为GridView的GridLayoutAnimationController就是对LayoutAnimationController进行了扩展!!属性也有相似的地方,在介绍属性的时候会稍微介绍一下的!!!
先看一下效果图:
下面是使用了插值器后的动画,其实两者都是有插值器的,上面的两幅效果图是默认插值器(不知道是加速度插值器还是线性插值器,有兴趣的朋友可以自己看一下源码)
看一下主布局文件:
看一下java代码文件:
在这里通过一个方法设置GridLayoutAnimationController的属性,这里面的属性与xml中的属性是对应的,其中setDirection表示的是item加载的方向,setDirectionPriority表示的加载顺序,delay这个就跟LayoutAnimationController里面的delay代表的意义一样,确定每个item的动画的开始时间:
看一下源码吧:
是不是跟上一篇中的源码方法很相似,真正的delay时间都是有我们设置的delay值和插值器的返回值决定的,具体的就不细说了,不明白的看一下源码吧!!
grid_animtion.xml文件:
在源码中,不仅给出了在java中加载layout动画的方法,也提供了在xml文件加载layout动画的方法,需要的朋友可以自行去源码中查询!!
这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!
源码地址:
https://github.com/zhuyuqiang2017/Animation
先看一下效果图:
下面是使用了插值器后的动画,其实两者都是有插值器的,上面的两幅效果图是默认插值器(不知道是加速度插值器还是线性插值器,有兴趣的朋友可以自己看一下源码)
看一下主布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.gridviewanimationdemo.MainActivity"> <GridView android:id="@+id/grid_view" android:numColumns="4" android:layout_width="match_parent" android:layout_height="match_parent"> </GridView> </LinearLayout>
看一下java代码文件:
package com.example.gridviewanimationdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.animation.AnimationUtils; import android.view.animation.CycleInterpolator; import android.view.animation.GridLayoutAnimationController; import android.widget.GridView; import android.widget.ListAdapter; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { private GridView mGridView; private SimpleAdapter mAdapter; private List<HashMap<String,String>> mData; private GridLayoutAnimationController mController; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mGridView = (GridView) findViewById(R.id.grid_view); initData(); mController = new GridLayoutAnimationController(MainActivity.this,null); initAnimation(); mAdapter = new SimpleAdapter(MainActivity.this,mData,android.R.layout.simple_list_item_1,new String[]{"index"},new int[]{android.R.id.text1}); mGridView.setLayoutAnimation(mController); mGridView.setAdapter(mAdapter); } private void initAnimation(){ mController.setColumnDelay(0.5f); mController.setDirection(GridLayoutAnimationController.DIRECTION_LEFT_TO_RIGHT|GridLayoutAnimationController.DIRECTION_TOP_TO_BOTTOM); mController.setDirectionPriority(GridLayoutAnimationController.PRIORITY_ROW); mController.setAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.grid_animation)); mController.setRowDelay(0.5f); mController.setInterpolator(new CycleInterpolator(1.0f)); } private void initData(){ mData = new ArrayList<>(); HashMap<String,String> mMap = null; for(int i = 0 ;i<27;i++){ mMap = new HashMap<>(); mMap.put("index","这是第"+(i+1)+"数据"); mData.add(mMap); } } }
在这里通过一个方法设置GridLayoutAnimationController的属性,这里面的属性与xml中的属性是对应的,其中setDirection表示的是item加载的方向,setDirectionPriority表示的加载顺序,delay这个就跟LayoutAnimationController里面的delay代表的意义一样,确定每个item的动画的开始时间:
看一下源码吧:
protected long getDelayForView(View view) { ViewGroup.LayoutParams lp = view.getLayoutParams(); AnimationParameters params = (AnimationParameters) lp.layoutAnimationParameters; if (params == null) { return 0; } final int column = getTransformedColumnIndex(params); final int row = getTransformedRowIndex(params); final int rowsCount = params.rowsCount; final int columnsCount = params.columnsCount; final long duration = mAnimation.getDuration(); final float columnDelay = mColumnDelay * duration; final float rowDelay = mRowDelay * duration; float totalDelay; long viewDelay; if (mInterpolator == null) { mInterpolator = new LinearInterpolator(); } switch (mDirectionPriority) { case PRIORITY_COLUMN: viewDelay = (long) (row * rowDelay + column * rowsCount * rowDelay); totalDelay = rowsCount * rowDelay + columnsCount * rowsCount * rowDelay; break; case PRIORITY_ROW: viewDelay = (long) (column * columnDelay + row * columnsCount * columnDelay); totalDelay = columnsCount * columnDelay + rowsCount * columnsCount * columnDelay; break; case PRIORITY_NONE: default: viewDelay = (long) (column * columnDelay + row * rowDelay); totalDelay = columnsCount * columnDelay + rowsCount * rowDelay; break; } float normalizedDelay = viewDelay / totalDelay; normalizedDelay = mInterpolator.getInterpolation(normalizedDelay); return (long) (normalizedDelay * totalDelay); }
是不是跟上一篇中的源码方法很相似,真正的delay时间都是有我们设置的delay值和插值器的返回值决定的,具体的就不细说了,不明白的看一下源码吧!!
grid_animtion.xml文件:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000"> <alpha android:fromAlpha="0" android:toAlpha="1"/> <scale android:fromXScale="2" android:fromYScale="2" android:pivotX="50%" android:pivotY="50%" android:toXScale="1" android:toYScale="1"/> <translate android:fromXDelta="0" android:fromYDelta="100%p" android:toXDelta="0" android:toYDelta="0"/> </set>
在源码中,不仅给出了在java中加载layout动画的方法,也提供了在xml文件加载layout动画的方法,需要的朋友可以自行去源码中查询!!
这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!
源码地址:
https://github.com/zhuyuqiang2017/Animation
相关文章推荐
- 使用LayoutAnimationController实现ListView动画效果
- 使用Animation list实现网络请求过程中的加载动画dialog
- 绘图与动画之使用CAKeyframeAnimation实现仿WP水滴加载动画
- Android下Animation动画的使用 及 Volley加载图片动画实现
- cocos2d中如何使用图片纹理图集的加载来实现一个动画的功能
- css3 | 中的animation/@keyframes xz动画效果-如何使用纯css实现动画效果? 用法:animation:xz 3s 2 4s alternate; 参数:animati
- 【源代码】手把手教你Autolayout如何使用动画(附类似Passbook效果Demo+详细分析实现原理)
- 使用Animation-list实现等待加载动画效果
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- Android中如何使用rotate实现图片不停旋转的效果与动画的停止
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- android 视图动画的使用,Animation重写 实现旋转效果
- 使用requestAnimationFrame实现平滑高效的javascript动画
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- 安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果
- 使用 CSS3 实现超炫的 Loading(加载)动画效果
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- 使用LayoutAnimationControl制作控件动画
- 使用requestAnimationFrame更好的实现javascript动画(kimhou 译)
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用