Android GridView实现动画效果实现代码

Android GridView实现动画效果

项目中用到的一些动画,GridView的Item依次从屏幕外飞入到相应位置,附上相关代码:

MainActivity.Java

package com.mundane.gridanimationdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.GridView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private GridView mGridView; private List<String> mList; private GridAdapter mGridAdapter; private Button mBtnRefresh; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mGridView = (GridView) findViewById(R.id.grid_view); mBtnRefresh = (Button) findViewById(R.id.btn_refresh); mBtnRefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mBtnRefresh.setVisibility(View.INVISIBLE); mGridAdapter.notifyDataSetChanged(); } }); mList = new ArrayList<>(); for (int i = 0; i < 9; i++) { mList.add(i + ""); } mGridAdapter = new GridAdapter(mList); final TranslateAnimation animation = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0); animation.setDuration(200); animation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { mBtnRefresh.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } }); mGridAdapter.setOnLastItemAnimationEndListener(new GridAdapter.OnLastItemAnimationEndListener() { @Override public void onAnimationEnd() { mBtnRefresh.startAnimation(animation); } }); mGridView.setAdapter(mGridAdapter); } }

GridAdapter.java

package com.mundane.gridanimationdemo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; /** * Created by Jackie on 2017/3/7 16:29 */ public class GridAdapter extends BaseAdapter{ private List<String> mList; public GridAdapter(List<String> list) { mList = list; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { String text = mList.get(position); ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_desk_grid_item, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } convertView.setVisibility(View.INVISIBLE); holder.textView.setText(text); int count = 3 - position % 3; final TranslateAnimation translateAnimation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, count, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0); translateAnimation.setDuration(count* 100); // final Animation animation = AnimationUtils.loadAnimation(parent.getContext(), R.anim.slide_in_right); final View finalConvertView = convertView; convertView.postDelayed(new Runnable() { @Override public void run() { finalConvertView.startAnimation(translateAnimation); } }, position * 200); translateAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { finalConvertView.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animation animation) { if (position == mList.size() - 1) { if (mListener != null) { mListener.onAnimationEnd(); } } } @Override public void onAnimationRepeat(Animation animation) { } }); return convertView; } static class ViewHolder { TextView textView; public ViewHolder(View view) { textView = (TextView) view.findViewById(R.id.tv); } } public interface OnLastItemAnimationEndListener { void onAnimationEnd(); } private OnLastItemAnimationEndListener mListener; public void setOnLastItemAnimationEndListener(OnLastItemAnimationEndListener listener) { mListener = listener; } }

参上上面的代码,还可以实现GridView Item的其他动画效果,注意//注释的部分,这个就是另外的动画效果,这里就不作过多的描述。

activity_main.xml

<?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" android:orientation="vertical" tools:context="com.mundane.gridanimationdemo.MainActivity"> <Button android:visibility="invisible" android:id="@+id/btn_refresh" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="刷新"/> <GridView android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:stretchMode="columnWidth" android:id="@+id/grid_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#f6f6f6" android:horizontalSpacing="10dp" android:numColumns="3" android:scrollbars="none" android:verticalSpacing="10dp"> </GridView> </LinearLayout>

card_desk_grid_item.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#33000000" android:layout_width="match_parent" android:layout_height="156dp"> <TextView android:id="@+id/tv" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>

效果如下:

模拟器上运行很卡,真机上是很流畅的。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-10-25 00:43:37

Android GridView实现动画效果实现代码的相关文章

Android补间动画效果

Android的SDK提供了三种类型的动画,分别是补间动画.逐帧动画和插值属性动画.下面先介绍第一种动画效果-补间动画. 补间动画可以应用于View,让开发者可以定义一些关于大小.位置.旋转和透明度的改变效果,达到让View的内容动起来的效果. 补间动画是使用Animation类创建的,它有4个直接子类,分别实现不同的动画效果,分别为: AlphaAnimation 渐变透明度动画效果,即淡入淡出效果 ScaleAnimation 渐变尺寸伸缩动画效果,即缩放效果 TranslateAnimat

Android实现带动画效果的可点击展开TextView

本文为大家分享了Android实现带动画效果的可点击展开TextView 制作代码,效果图: 收起(默认)效果: 点击展开后的效果: 源码: 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/a

在AngularJS应用中实现一些动画效果的代码

  这篇文章主要介绍了在AngularJS应用中实现一些动画效果的代码,AngularJS是一款热门的JavaScript库,需要的朋友可以参考下 在Angular当中,CSS和JavaScript之间唯一的区别就是它们的定义.没有什么区别妨碍到被定义的动画被使用.首先,我们需要加载ngAnimate模块到我们应用的root模块当中. ? 1 angular.module('coursesApp', ['ngAnimate']); 而所有将被处理的JavaScript动画事件依然保持不变.以下是

jQuery实现美观的多级动画效果菜单代码_jquery

本文实例讲述了jQuery实现多级动画效果菜单代码.分享给大家供大家参考.具体如下: 这是基于jQuery实现的一款多级动画菜单源代码,动画效果流畅,确实不错的动画菜单,欢迎大家试用.这种菜单 一般应用于大站,不过如果你的站点内容比较多,也是可以考虑的哦. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-nlevel-animate-menu-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC &quo

通过jquery实现页面的动画效果(实例代码)_jquery

有很多函数可以用来实现动画效果,其中animate函数为最为常见的函数之一.以下为对该函数使用方式的简要介绍. animate函数基本形式 通过animate实现动画效果的基本形式为: $(selector).animate({params},speed,callback); 其中{params}为必须项,它是一个对象,指明了我们希望指定元素通过动画效果运行后,其所具有的的CSS样式,speed和callback则皆为可选项,其中speed指明了动画运行的速度,其值可为数值类型(如1000表示动

Android DrawerLayout实现抽屉效果实例代码

官网:https://developer.android.com/training/implementing-navigation/nav-drawer.html 贴上主要的逻辑和布局文件: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schema

Android xml实现animation的4种动画效果实例代码_Android

animation有四种动画类型:分别为alpha(透明的渐变).rotate(旋转).scale(尺寸伸缩).translate(移动),二实现的分发有两种,一种是javaCode,另外一种是XML,而我今天要说的是XML实现的方法,个人感觉javaCode的实现方法比xml要简单,所以有需要的可以自己去找找资料看看. 先给大家展示下效果图,如果大家感觉还不错,请继续往下阅读. 下面是我的四个xml文件,分别代表这四种动画类型. alpha.xml COde: <?xml version=&quo

Android xml实现animation的4种动画效果实例代码

animation有四种动画类型:分别为alpha(透明的渐变).rotate(旋转).scale(尺寸伸缩).translate(移动),二实现的分发有两种,一种是javaCode,另外一种是XML,而我今天要说的是XML实现的方法,个人感觉javaCode的实现方法比xml要简单,所以有需要的可以自己去找找资料看看. 先给大家展示下效果图,如果大家感觉还不错,请继续往下阅读. 下面是我的四个xml文件,分别代表这四种动画类型. alpha.xml COde: <?xml version=&quo

Android直播app送礼物连击动画效果(实例代码)

最近在做公司的直播项目,需要实现一个观看端连击送礼物的控件: 直接上代码: /** * @author yangyinglong on 2017/7/11 16:52. * @Description: todo(这里用一句话描述这个类的作用) * @Copyright Copyright (c) 2017 Tuandai Inc. All Rights Reserved. */ public class CustomGiftView extends LinearLayout { private