gridView item一个一个出来,一个一个消失动画
来源:互联网 发布:体检软件使用范围 编辑:程序博客网 时间:2024/05/06 15:55
转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/51546426
本篇博客最终效果,如下所示:
当点击click按钮,弹出对话框,gridView里面的item一个一个从下往上出来;当点击红叉按钮,gridView里面的item一个一个从上往下的消失。
其实刚开始做的时候,item一个一个出来的动画,官方api是有现成的接口的,调用setLayoutAnimation(LayoutAnimationController controller)这个方法就可以。
看官方文档是这样描述的:
Sets the layout animation controller used to animate the group's children after the first layout.
翻译为:设置布局动画控制器用来给第一次出现的ChildView做动画。
但是,令我无语的是,官方并没有现成的item一个个一消失的动画,最终我通过下面的方法解决了这个问题,在这里进行记录,方法是,当我点击红色叉的时候,让每一个item都执行一个动画,通过迭代的方法来实现动画效果。
Java类就这三个,
我现在只放MoreFragmentDialog的代码,其他的代码,你可以下载demo,直接去看,链接地址在文章的末尾。
package com.example.test;import java.util.ArrayList;import java.util.List;import android.app.DialogFragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.AnimationSet;import android.view.animation.LayoutAnimationController;import android.view.animation.TranslateAnimation;import android.widget.GridView;import android.widget.LinearLayout;public class MoreFragmentDialog extends DialogFragment implements OnClickListener{ private GridView gv; /** * 关闭按钮 */ private LinearLayout close; /** * 当前下降的是哪个item */ private int downNum; /** * 是否多次点击关闭按钮 */ private boolean isMultiple = false; private List<String> stringlList; public static MoreFragmentDialog newInstance(){ MoreFragmentDialog fragmentDialog=new MoreFragmentDialog(); return fragmentDialog; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //全屏幕 setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_more,container , false); gv=(GridView) view.findViewById(R.id.gv); gv.setLayoutAnimation(getAnimationController()); initList(); close=(LinearLayout) view.findViewById(R.id.close); close.setOnClickListener(this); return view; } private void initList() { stringlList=new ArrayList<>(); for (int i = 0; i < 6; i++) { stringlList.add(i+""); } MyBaseAdapter adapter=new MyBaseAdapter(getActivity(),stringlList); gv.setAdapter(adapter); } @Override public void onClick(View v) { if (!isMultiple) { isMultiple = true; if (v == close) { downNum = stringlList.size()-1; removeGridViewItem(gv.getChildAt(downNum), downNum); } } } /** * Layout动画 * * @return */ protected LayoutAnimationController getAnimationController() { int duration = 400; AnimationSet set = new AnimationSet(true); Animation animation = new AlphaAnimation(0.0f, 1.0f); animation.setDuration(duration); set.addAnimation(animation); animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f); animation.setDuration(duration); set.addAnimation(animation); LayoutAnimationController controller = new LayoutAnimationController( set, 0.5f); controller.setOrder(LayoutAnimationController.ORDER_NORMAL); return controller; } /** * 移除gridView固定位置的一个item * * @param rootView * gridView固定位置的View * @param position * gridView固定位置的position */ private void removeGridViewItem(final View rootView, final int position) { AnimationSet set = new AnimationSet(true); Animation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f); animation.setDuration(400); set.addAnimation(animation); animation = new AlphaAnimation(1.0f, 0.0f); animation.setDuration(400); set.addAnimation(animation); set.setAnimationListener(new AnimationListener() { public void onAnimationStart(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationEnd(Animation animation) { //隐藏已经退出的item rootView.setVisibility(View.INVISIBLE); downNum--; if (downNum == -1) { isMultiple = false; MoreFragmentDialog.this.dismiss(); return; } removeGridViewItem(gv.getChildAt(downNum), downNum); } }); rootView.startAnimation(set); }}
关于TranslateAnimation里面的参数问题,你可以查看这篇文章:
http://blog.csdn.net/knlnzhao/article/details/8026778
本篇博客demo下载地址为:http://download.csdn.net/detail/harryweasley/9536614
1 0
- gridView item一个一个出来,一个一个消失动画
- js控制文字一个一个的显示出来
- Android实现文字一个一个显示出来
- js 实现网页一个一个字打印出来的效果
- js/jquery让数字号码一个一个出来的效果
- 自定义View -- 实现字符串一个一个显示的动态动画
- Flex快捷键 一个一个记
- 一个一个来吧
- jquery 学习,一个一个来
- 1602 一个一个到字符串
- C++一个一个Hwd类库
- 跑 马 灯 效 果,状态栏的字一个一个出来(javascript)
- php 输出一个一个字符串下载
- 串口实现一个一个读数据
- 一个一个解决掉所有难点
- android实现gallery一个一个滑动
- 事情总要一个一个来解决的
- 关于我自己的一个一个一计划
- <LeetCode OJ> 223. Rectangle Area
- C# 数据库概念相关 访问MySQL的方法
- Middle-题目32:240. Search a 2D Matrix II
- usage of vector
- 简单东西-问题整理
- gridView item一个一个出来,一个一个消失动画
- 【leetcode】Intersection of Two Arrays
- 生成派生类
- Performance Resource Page for Microsoft Dynamics AX
- Modsecurity白名单
- 例题 7-6 UVA - 140 Bandwidth 带宽 (全排列暴力)
- 画图养成日记(二)
- Codeforces 637D Running with Obstacles (贪心)
- R参考卡片