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>

效果如下:

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

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

(0)

相关推荐

  • Android自定义DataGridView数据表格控件

    我是一个.net程序员,但是苦于公司要求开发一个android app,没办法,只能硬着头皮上了. 由于项目里面很多地方需要用到数据显示控件(类似于.net的DataGridView),度娘找了下发现没人公开类似的控件,没办法只好自己写了. 废话不多说,直接贴代码: public class DataGridView extends HorizontalScrollView { private List<DataGridViewColumn> columns; private List<

  • Android GridView简单实例

    也是今天用到的一个东西,就是简单实现九宫格的Demo 1.就是定义各种layout 和对应的item 我的: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" and

  • Android 利用ViewPager+GridView实现首页导航栏布局分页效果

    最近我尝试使用ViewPager+GridView实现的,看起来一切正常,废话不多说,具体代码如下: 如图是效果图 首先分析下思路 1.首先是怎么布局:整体是一个ViewPager将GridView作为一个View添加到ViewPager的adapter中,下方是圆点 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

  • Android使用GridView实现日历功能示例(详细代码)

    Android使用GridView实现日历功能示例,代码有点多,发个图先: 如果懒得往下看的,可以直接下载源码吧,最近一直有人要,由于时间太久了,懒得找出来整理,今天又看到有人要,正好没事就整理了一下 源码下载.... 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

  • Android 中 GridView嵌套在ScrollView里只有一行的解决方法

    在做android项目中遇到一个bug,GridView嵌套在ScrollView里只有一行的问题.下面小编在网上找到了解决方法,具体方法如下所示: 方法一:就是上面说的通过计算出来ListView或者GridView中的子列高度和 进行显示: public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdap

  • android中GridView实现点击查看更多功能示例

    首先来看一下效果图:   先说一下我的需求:查看群成员,如果超过15人则全部显示,如果大于15人则先加载15人,其余的不显示,点击查看更多则加载全部.再来说一下我实现的逻辑:首先呢要判断群成员的人数,如果小于或者等于15就用GridView加载全部数据,隐藏查看更多的按钮.如果大于15人,则显示加载更多的按钮,先加载15条数据,其余的不加载,点击按钮之后获取全部数据放到自己写好的adapter里然后加载刷新,再隐藏加载更多的按钮. 好了,来看代码: <LinearLayout android:l

  • Android使用GridView实现日历的简单功能

    简单的日历实现,只是显示了每一个月,没有显示当天和记事这些功能 主要是计算月初是周几,月末是周几,然后相应的显示上一月多少天和下一月多少天. 先看一下关于日期的用到的几个工具类 /** * 获取该月天数 */ public static int getCurrentMonthDay(long millSec) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(millSec); calendar.set(

  • Android中控件GridView实现设置行列分割线的方法示例

    前言 虽然Aandroid目前已经有RecyclerView了.非常强大的一个View.可以直接控制成ListView以及GridView等.而且画框线也比较方便.但是呢在很多情况下我们不得不仍然使用GridView来实现布局.那么在这个时候我们又要怎么来对GridViw进行画框线呢.下面将提供两种实现方式.大家可以选择一下 一.设置垂直.横向间距.通过GRIDVIEW和ITEM的背景色来实现 1.设置GridView背景色 2.设置水平和竖直方向间隔:android:horizontalSpa

  • 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.an

  • Android仿Flipboard动画效果的实现代码

    1.上原图 前几天在 Hencoder 征稿看到的Filpboard 里的的动画效果: Filipboard.gif 先bb一句:在看本文的同时,如果觉得我写的模糊看不太懂的可以直接拉到文末,配合完整代码再一步一步看. 2.实现 整体思路: 用手机拍下来,逐帧观看了许久,恍然大悟,就是一张纸,折起一边之后,让其对折线绕中心点旋转. 关联自定义 View : Camera 来控制对折幅度, canves 控制旋转. 具体: 每当对折线旋转的时候,图标总是一边是折起来的,一边是平铺的,且中心对称,所

  • Android 仿余额宝数字跳动动画效果完整代码

    一:想都不用想的,有图有真相,看着爽了,在看下面源码 二:实例源码分析 ①:首先定义接口 package com.demo.tools.view; /** * 数字动画自定义 * * @author zengtao 2015年7月17日 上午11:48:27 * */ public interface RiseNumberBase { public void start(); public RiseNumberTextView withNumber(float number); public R

  • Android仿打开微信红包动画效果实现代码

    首先看下效果: 实现原理: 准备3张不同角度的图片,通过AnimationDrawable帧动画进行播放即可 代码实现: 1.编写动画xml文件: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false&

  • 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

  • Android自定义带动画效果的圆形ProgressBar

    本文实例为大家分享了Android自定义带动画效果的圆形ProgressBar,供大家参考,具体内容如下 最近有个需求显示进度,尾部还要有一标示,像下边这样 使用自定义View的方式实现,代码如下,很简单注释的很清楚 文章最后我们拓展一下功能,实现一个带动画效果的进度条 package com.example.fwc.allexample.progressbar; import android.animation.ValueAnimator; import android.annotation.

  • Android共享元素动画效果显示问题解决

    目录 bug描述 官方文档 解决流程 总结 bug描述 设计同学想搞一个点击图片item,item内的图片移动到新页面的图片位置的效果,一想就是共享元素就能搞定啊. companion object { fun gotoDetail( context: Activity, dynamicId: String?, jumpComment: Boolean = false, shareElement: Boolean = false, imageView: ImageView? = null, na

  • Android实现水波纹效果实例代码

    效果图 attrs.xml 自定义属性 <declare-styleable name="RippleAnimationView"> <attr name="ripple_anim_color" format="color" /> <!-- 水波纹填充类型 --> <attr name="ripple_anim_type" format="enum"> <

  • jQuery模拟实现天猫购物车动画效果实例代码

    一.功能描述: 1.点击购买按钮,模拟抛物线将物品弹到购物车里: 2.购物车添加物品后,显示+1动画: 效果图如下: 实现如下: 1.导入jquery相关的包: <script type="text/javascript" src="jquery-2.1.1.min.js"></script> <script src="jquery.fly.min.js"></script> 2.html文件内容:

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

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

随机推荐