`

ListView,GridView之LayoutAnimation特殊动画的实现

阅读更多
LayoutAnimation干嘛用的?不知道的话网上搜一下。
Android的Animation之LayoutAnimation使用方法

有两种用法,我的通常写在代码中,像下面这样:
/**
	 * Layout动画
	 * 
	 * @return
	 */
	protected LayoutAnimationController getAnimationController() {
		int duration=300;
		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;
	}


应用的时候只需这样:
listView = (ListView) findViewById(R.id.listView);
listView.setLayoutAnimation(getAnimationController());
adapter = new ListViewAdapter(stores);
listView.setAdapter(adapter);


这样一个简单的LayoutAnimation就完成了。

别看到这里就以为文章就完了,以上都是些小玩意。呵呵,还有更厉害的!

你想设置更炫的动画吗?LayoutAnimation通常是Item一个一个的出现,有某种规律的。想让每个Item都有自己的动画吗?那就继续看下去。
.......
private int duration=1000;
		private Animation push_left_in,push_right_in;
		private Animation slide_top_to_bottom,slide_bottom_to_top;
		public ListViewAdapter(ArrayList<Store> list) {
			this.list = list;
			push_left_in=AnimationUtils.loadAnimation(context, R.anim.push_left_in);
			push_right_in=AnimationUtils.loadAnimation(context, R.anim.push_right_in);
			slide_top_to_bottom=AnimationUtils.loadAnimation(context, R.anim.slide_top_to_bottom);
			slide_bottom_to_top=AnimationUtils.loadAnimation(context, R.anim.slide_bottom_to_top);
		}
........

@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			ViewHodler hodler;
			if (convertView == null) {
				hodler = new ViewHodler();
				convertView = LayoutInflater.from(context).inflate(
						R.layout.simple_item_7_for_main, null);
				........
				
				
				convertView.setTag(hodler);
				
				if (position % 2 == 0) {
					push_left_in.setDuration(duration);
					convertView.setAnimation(push_left_in);
				} else {
					push_right_in.setDuration(duration);
					convertView.setAnimation(push_right_in);
				}
				
				/*if(position==0){
					slide_bottom_to_top.setDuration(duration);
					convertView.setAnimation(slide_bottom_to_top);
				}
				else{
					slide_top_to_bottom.setDuration(duration);
					convertView.setAnimation(slide_top_to_bottom);
				}*/
				
			}else{
				hodler = (ViewHodler) convertView.getTag();
			}
........
			
			
			return convertView;
		}

看见上面的动画设置了吗?将动画写在getView()中,这样可以设置很多不同的动画。其实这不属于LayoutAnimation的范畴了。
你可以试一下,如果设计好的话,可以有比LayoutAnimation更酷的效果。
我这里只试了两种效果。
下面是我的动画文件,共四个:
第一种效果:item分别从左右两侧滑入效果。
push_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="300"/>
	<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

push_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
	<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>


第2种效果:第一个item从下往上滑入,其他Item从上往下滑入效果,这个效果如果单个Item比较高(height)的话效果非常酷(卡牛的老版本好像用的就是这种效果)。
slide_bottom_to_top.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
    <translate android:fromYDelta="100%" android:toXDelta="0" android:duration="300" />
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

slide_top_to_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
    <translate android:fromYDelta="-100%" android:toXDelta="0" android:duration="300" />
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>


另外一篇:
这个不是我写的。
GridView的item从上下左右飞入
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
public class ZdemoActivity extends Activity {
 
 private GridView gv;
 private Button btn;
 private TranslateAnimation taLeft, taRight, taTop, taBlow;
 private int[] imgList = new int[15];
 private MyAdapter mAdapter;
 private LayoutInflater mInflater;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.InitView();
  this.InitAnima();
  this.InitData();
 }
 private void InitAnima() {
  // TODO Auto-generated method stub
  taLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
  taRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
  taTop = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
  taBlow = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f,
    Animation.RELATIVE_TO_PARENT, -1.0f,
    Animation.RELATIVE_TO_PARENT, 0.0f);
  taLeft.setDuration(1000);
  taRight.setDuration(1000);
  taTop.setDuration(1000);
  taBlow.setDuration(1000);
 }
 private void InitData() {
  // TODO Auto-generated method stub
  for (int i = 0; i < 15; i++) {
   imgList[i] = R.drawable.ic_launcher;
  }
  mAdapter = new MyAdapter();
  gv.setAdapter(mAdapter);
 }
 private void InitView() {
  // TODO Auto-generated method stub
  gv = (GridView) findViewById(R.id.gridView1);
  btn = (Button) findViewById(R.id.button1);
  btn.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    mAdapter = null;
    mAdapter = new MyAdapter();
    gv.setAdapter(mAdapter);
    mAdapter.notifyDataSetChanged();
   }
  });
  mInflater = (LayoutInflater) this
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }
 private class MyAdapter extends BaseAdapter {
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return imgList.length;
  }
  @Override
  public Object getItem(int position) {
   // TODO Auto-generated method stub
   return imgList[position];
  }
  @Override
  public long getItemId(int position) {
   // TODO Auto-generated method stub
   return position;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub
   ViewHolder holder = null;
   if (convertView == null) {
    convertView = mInflater.inflate(R.layout.item, null);
    holder = new ViewHolder();
    holder.image = (ImageView) convertView
      .findViewById(R.id.imageView1);
    convertView.setTag(holder);
   } else {
    holder = (ViewHolder) convertView.getTag();
   }
   int imgID = imgList[position];
   holder.image.setImageResource(imgID);
   Random ran = new Random();
   int rand = ran.nextInt(4);
   switch (rand) {
   case 0:
    convertView.startAnimation(taLeft);
    break;
   case 1:
    convertView.startAnimation(taRight);
    break;
   case 2:
    convertView.startAnimation(taTop);
    break;
   case 3:
    convertView.startAnimation(taBlow);
    break;
   }
   return convertView;
  }
  class ViewHolder {
   public ImageView image;
  }
 }
}



Android LayoutAnimation使用及扩展
http://my.oschina.net/u/724985/blog/289123
分享到:
评论

相关推荐

    listview gridview 上拉加载 下拉刷新 包含6个demo

    5. "scrollview ListView GridView上拉刷新下拉加载":此项目可能包含在一个ScrollView容器内嵌套ListView和GridView的上拉刷新和下拉加载实现,这对于处理复杂布局的场景很有用。 6. "MyGridCustomDemo":这可能是...

    ListView嵌套GridView 并实现行列选择

    本文将详细探讨如何实现ListView嵌套GridView,并实现行列选择的功能。 首先,我们要理解ListView和GridView的基本概念。ListView是一种可以滚动的视图,用于显示一系列相同类型的项目,每个项目通常由一个View或一...

    ListView嵌套GridView实现左右滑动的效果

    当需要在一个列表项中展示多列内容时,我们可能会考虑将GridView嵌套在ListView中,以实现更复杂的视图效果。本教程将探讨如何在Android中实现ListView嵌套GridView,并使其支持左右滑动。 首先,我们需要理解...

    ListView嵌套GridView代码实现

    在描述中提到的案例中,开发者已经实现了ListView嵌套GridView的功能,并提供了相关的代码。下载后,你需要将这些代码片段放入到自己的Android工程中,对应的位置包括: - activity_main.xml:主布局文件,包含...

    ListView中的几种位置关系和LayoutAnimation在listview中的应用

    要实现ListView的LayoutAnimation,首先需要创建一个AnimationController,这可以通过XML动画资源或编程方式实现。例如,创建一个简单的淡入动画: ```xml &lt;layoutanimation xmlns:android=...

    Listview嵌套Gridview-demo

    接着,对于嵌套的GridView,它同样需要一个Adapter来绑定数据,但由于其在ListView内部,我们需要创建一个特殊的Adapter,这个Adapter将作为ListView中每一项的子Adapter。GridView中的每一项都会是一个独立的列表,...

    android ListView和GridView拖拽移位实现代码

    本文将深入探讨如何在Android中实现ListView和GridView的拖拽移位功能,这在构建可交互的应用界面时非常有用,比如在音乐播放器、文件管理器等场景。 首先,我们需要了解ListView和GridView的基本用法。ListView...

    自定义ListView内嵌GridView,用ExpandableListView实现

    以上就是关于“自定义ListView内嵌GridView”和使用ExpandableListView实现多级菜单设计的相关知识点。通过理解这两种方法的工作原理和实现步骤,开发者可以根据项目需求灵活选择合适的方案,创建出功能丰富的...

    ListViewGridView填充效果

    - **自定义动画**:开发者可以通过设置`ListView.setSmoothScrollbarEnabled(true)`来开启平滑滚动效果,还可以自定义`AbsListView.ItemAnimator`来添加过渡动画,使列表项的显示更加生动。 - **Header和Footer**...

    listView 嵌套gridView android

    总之,ListView嵌套GridView是Android开发中的常见需求,通过合理设计Adapter和优化滚动性能,可以实现完全显示GridView内容且滚动不卡顿的效果。在实际项目中,根据具体需求进行调整和优化,可以提高用户体验。

    listview gridview 图片缩放

    - 为了实现图片的缩放,通常需要自定义ListView或GridView的Adapter,重写`getView()`方法。在这个方法中,根据`convertView`和`holder`来复用视图,然后加载并设置缩放后的图片。 6. **内存缓存与磁盘缓存** - ...

    listview gridview adapter的使用

    本篇将深入探讨如何使用SimpleAdapter和ArrayAdapter来实现ListView和GridView的布局。 首先,我们来了解适配器的基本概念。适配器是Android中一个关键的设计模式,它充当了数据源和视图之间的桥梁,负责把数据转化...

    listview gridview 手势操作

    本篇文章将深入探讨如何在ListView和GridView中实现手势操作。 首先,我们需要了解ListView和GridView的基本用法。ListView是一种单列布局的组件,适合展示一维数据,而GridView则是一种多列布局的组件,适合展示二...

    listView嵌套GridView的demo

    本示例提供了“listView嵌套GridView的demo”,帮助开发者理解和实现这种复杂的布局结构。 首先,我们来理解ListView。ListView是一种可以滚动的视图,通常用于显示一列可滚动的数据列表。每个列表项可以通过自定义...

    ListView嵌套GridView解决方案

    然而,在某些场景下,我们可能需要在一个ListView的每个条目中再嵌套一个GridView,以实现更复杂的布局效果。本文将详细介绍如何在Android中实现ListView嵌套GridView的解决方案。 首先,理解基本概念。ListView是...

    手机摇一摇震动刷新(支持ListView GridView WebView)

    这是我写的手机摇一摇震动刷新(支持支持ListView GridView WebView)并生成二维码的源码,我的Github上面有更多的效果介绍,有兴趣的小伙伴猛戳吧,https://github.com/changechenyu/ShakeToFresh 如果觉得很好玩...

    ListView和GridView的上拉加载下拉刷新

    本篇文章将详细讲解如何实现ListView和GridView的上拉加载(Load More)和下拉刷新(Pull to Refresh)功能,以增强用户体验。 一、ListView与GridView概述 1. ListView:ListView是一个可以滚动的视图,它允许...

    GridView和ListView的布局实现

    GridView和ListView的布局实现 GridView和ListView的布局实现 GridView和ListView的布局实现 GridView和ListView的布局实现 GridView和ListView的布局实现 GridView和ListView的布局实现

    Android scrollview ListView GridView上拉下拉刷新

    总结来说,Android中的ScrollView、ListView和GridView上拉下拉刷新功能的实现涉及到自定义视图、滑动事件监听、数据加载逻辑和缓冲效果优化。熟练掌握这些技术,能有效提升应用的用户体验,使用户在浏览大量数据时...

    listview中嵌套gridview

    总结一下,实现“ListView中嵌套GridView”涉及的关键知识点包括: 1. Android的ListView和GridView布局控件的理解与使用。 2. 自定义Adapter,包括ListViewAdapter和GridViewAdapter。 3. ViewHolder模式的应用,...

Global site tag (gtag.js) - Google Analytics