动画切换view布局

动画切换view布局,可用于滚屏显示评论等例子

package com.example.animationviewdemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ListAdapter;

/**
 * 动画切换View
 */
public class AnimationView extends FrameLayout implements Runnable {
	private static final int DEFAULT_TIME_SPAN = 3000;
	/**
	 * 当前显示view序号
	 */
	private int index = 0;
	/**
	 * 切换时间
	 */
	private int timeSpan = DEFAULT_TIME_SPAN;

	/**
	 * 切出view
	 */
	private View firstView;
	/**
	 * 切入view
	 */
	private View secondView;

	/**
	 * 切入动画
	 */
	private Animation inAnim;
	/**
	 * 切出动画
	 */
	private Animation outAnim;
	/**
	 * view列表适配器
	 */
	private ListAdapter adapter;
	private Handler handler = new Handler();
	public AnimationView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public AnimationView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.AnimationView);

		timeSpan = ta.getInteger(R.styleable.AnimationView_time_span, DEFAULT_TIME_SPAN);

		int animInId = ta.getResourceId(R.styleable.AnimationView_anim_in, android.R.anim.slide_in_left);
		inAnim = AnimationUtils.loadAnimation(context, animInId);
		inAnim.setFillAfter(true);

		int animOutId = ta.getResourceId(R.styleable.AnimationView_anim_out, android.R.anim.slide_out_right);
		outAnim = AnimationUtils
				.loadAnimation(context, animOutId);
		outAnim.setFillAfter(true);

		ta.recycle();
	}

	/**
	 * 开始
	 */
	public void start() {
		if(adapter == null || adapter.getCount() == 0)
			return;
		removeAllViews();
		firstView = adapter.getView(index, null, null);
		addView(firstView);
		secondView = null;
		handler.postDelayed(this, timeSpan);
	}

	/**
	 * 停止
	 */
	public void stop() {
		handler.removeCallbacks(this);
	}

	public ListAdapter getAdapter() {
		return adapter;
	}

	public void setAdapter(ListAdapter adapter) {
		this.adapter = adapter;
		handler.removeCallbacks(this);
		index = 0;
	}

	@Override
	public void run() {
		if (firstView == null) {
			firstView = adapter.getView(index, null, null);
			addView(firstView);
		} else {
			firstView = adapter.getView(index, firstView, this);
		}
		++index;
		if (index >= adapter.getCount()) {
			index = 0;
		}
		if (secondView == null) {
			secondView = adapter.getView(index, null, null);
			addView(secondView);
		} else {
			secondView = adapter.getView(index, secondView, this);
		}
		firstView.startAnimation(outAnim);
		secondView.startAnimation(inAnim);
		handler.postDelayed(this, timeSpan);
	}

	public int getTimeSpan() {
		return timeSpan;
	}

	public void setTimeSpan(int timeSpan) {
		this.timeSpan = timeSpan;
	}

}
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="AnimationView">
        <attr name="time_span" format="integer" />
        <attr name="anim_in" format="reference" />
        <attr name="anim_out" format="reference" />
    </declare-styleable>

</resources>

demo链接:
http://git.oschina.net/lonelycoder/AnimationViewDemo

时间: 2024-12-25 06:02:47

动画切换view布局的相关文章

swift 动画切换View心地层次顺序

1.动画效果 2.代码 // // AppDelegate.swift // AnimationDemo // // Created by 赵超 on 14-6-27. // Copyright (c) 2014年 赵超. All rights reserved. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? //响应

语音输入和文字输入动画切换

随着语音的快速普及,很多应用都开始增加语音输入功能.下面是一个简单的语音和文字输入的动画切换: 布局文件: <ViewFlipper android:id="@+id/viewFlipper1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" &g

AndroidScreenSlide项目切换view动画效果

AndroidScreenSlide项目切换view动画效果 AndroidScreenSlide项目中有几个不错的效果,一:Card Flip翻页立体效果,二:Screen Slide 左右切换view时候和新加载view呈现效果,三:Layout Changes添加每一个item效果和删除每一个item效果.四:Advanced Screen Slide切换viewpager时页面切换动画效果.本项目来源:https://github.com/xiongwei-git/AndroidScre

AndroidScreenSlide项目切换view动画效果《IT蓝豹》

AndroidScreenSlide项目切换view动画效果 AndroidScreenSlide项目中有几个不错的效果,一:Card Flip翻页立体效果,二:Screen Slide 左右切换view时候和新加载view呈现效果,三:Layout Changes添加每一个item效果和删除每一个item效果.四:Advanced Screen Slide切换viewpager时页面切换动画效果.本项目来源:https://github.com/xiongwei-git/AndroidScre

Android自定义Viewgroup切换View带有吸附效果

1.概述 先上效果图 大概就是这个效果,先说说实现思路 1.首先我们要拿到图片的url(网络)或id.路径(本地),将View与数据进行绑定,写我们自己的Adapter 2.自定义Viewgroup将要显示的view进行布局,以及处理触摸事件进行逻辑处理 3.写切换回调 2.实现 1)自定义Adapter 这里我下载的网络图片,同样可以将图片放到res下设置ImageView的内容 public class DragPageViewAdapter { private static final S

IOS UIView 03- 自定义 Collection View 布局

注:本人是翻译过来,并且加上本人的一点见解. 前言 UICollectionView 在 iOS6 中第一次被引入,也是 UIKit 视图类中的一颗新星.它和 UITableView 共享一套 API 设计,但也在 UITableView 上做了一些扩展.UICollectionView 最强大.同时显著超出 UITableView 的特色就是其完全灵活的布局结构.在这篇文章中,我们将会实现一个相当复杂的自定义 collection view 布局,并且顺便讨论一下这个类设计的重要部分.项目的示

iOS_20_微博自定义可动画切换的导航控制器

最终效果: AnimatedNavigationController.h // // AnimatedNavigationController.h // 20_帅哥no微博 // // Created by beyond on 14-8-10. // Copyright (c) 2014年 com.beyond. All rights reserved. // 继承自导航控制器,但是多了一个功能,可以监听手势,进行动画切换 #import <UIKit/UIKit.h> @interface

Android View框架总结(六)View布局流程之Draw过程

转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52236145 View的Draw时序图 ViewRootImpl.performTraversals过程 ViewRootImpl.performDraw过程 View.draw方法 View.dispatchDraw过程 LinearLayout的onDraw过程 View的Draw时序图 前面几篇通过对View树的measure和layout过程分析事,接下来将结合前两步得到的测

tabbar动画切换

效果1: UIViewController *vc = self.viewControllers[self.selectedIndex]; CATransition *animation =[CATransition animation]; [animation setDuration:0.75f]; [animation setTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionDefault]