博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动画切换view布局
阅读量:6659 次
发布时间:2019-06-25

本文共 2919 字,大约阅读时间需要 9 分钟。

hot3.png

动画切换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;	}}

demo链接:

转载于:https://my.oschina.net/bankofchina/blog/363649

你可能感兴趣的文章
正则化
查看>>
js练习——图片切换
查看>>
Android Studio 的 build 过程
查看>>
SQL Server查询数据库空间分配情况、数据库备份信息
查看>>
win8的几种关机方法。
查看>>
安装fastx_toolkit (gcc, pkg-config)
查看>>
mybatis自动生成的ExamMapper.xml方法总结
查看>>
Prim算法求最小生成树
查看>>
ajax请求解析springmvc返回的json数据
查看>>
【原】iOS学习42即时通信之XMPP(1)
查看>>
数组乱序排列
查看>>
oracle 密码默认180天过期
查看>>
fre7 offonline for firefox
查看>>
类linux系统/proc/sysrq-trigger文件功能作用
查看>>
一周动态
查看>>
Scrapy使用详细记录
查看>>
Python总体架构图
查看>>
Docker 入门学习
查看>>
C/C++ 笔试、面试题目大汇总(转)
查看>>
Tuning 05 Sizing other SGA Structure
查看>>