TextView各种滚动动画实现
来源:互联网 发布:车辆工程设计软件下载 编辑:程序博客网 时间:2024/05/16 06:47
目前公司的项目中,有一个功能,使得一系列的数据每隔3秒依次向上滚动显示,当时做的的时候用到了属性动画,直接写了三个ObjectAnimator,位置分别为当前区域下,当前区域,当前区域上,然后new了一个AnimatorSet,按照顺序依次添加了进去,效果是实现了,但是 发现API14以下的手机还是无法滚动,并且突然觉得这种方法的实现具有很大的局限性,如果是向左,向右,淡入或者其它动画滚动,那么这种方法就黔驴技穷了;相比较来说,今天的这几种动画,代码简单,实现起来就很容易。
看下今天要实现的几种动画类型,更多android文章,请大家关注我的微信公众号,扫描第一条评论即可:
这几种动画类型的实现都是用到了anim文件下的动画配置资源文件,然后用动画工具类AnimationUtils的loadAnimation方法进行加载,然后把动画给设置给ViewFlipper,具体相关代码如下:
按照上图来说,整体布局为,上面是一个ViewFlipper,ViewFlipper主要用来实现View的自动切换,下面是一个下拉菜单Spinner:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ming.abner.textviewanimation.MainActivity">
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:flipInterval="2000" />
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/flipper"
android:layout_marginBottom="5dip"
android:text="选择滚动方式" />
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title" />
</RelativeLayout>
定义下拉菜单:
Spinner s = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, mContent);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
s.setOnItemSelectedListener(this);
mContent是定义的菜单:
private String[] mContent = {
"向上滚动", "向下滚动", "向左滚动", "向右滚动", "淡入淡出", "旋转"};
设置测试数据:
private List<String> contentList = new ArrayList<>();
for (int a = 0; a < 20; a++) {
contentList.add("我是测试数据" + a);
}
为ViewFlipper添加view,并启动ViewFlipper:
mViewFlipper = (ViewFlipper) findViewById(R.id.flipper);
for (int a = 0; a < contentList.size(); a++) {
View view = View.inflate(this, R.layout.textview, null);
TextView textView = (TextView) view.findViewById(R.id.tv_text);
textView.setText(contentList.get(a));
mViewFlipper.addView(view);
}
mViewFlipper.startFlipping();
做好准备工作之后,我们就可以在弹出来的Spinner内设置各个动画的点击事件了:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_up_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_up_out));
break;
case 1:
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_down_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_down_out));
break;
case 2:
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_left_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_left_out));
break;
case 3:
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_right_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_right_out));
break;
case 4:
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
break;
default:
mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_in));
mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.hyperspace_out));
break;
}
}
下面是一些用到的动画类型:
向上滚动:
push_up_in.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
push_up_out.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="-100%p" />
<alpha
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
向下滚动:
push_down_in.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="-100%p"
android:toYDelta="0" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
push_down_out.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%p" />
<alpha
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
向左滚动:
push_left_in.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="100%p"
android:toXDelta="0" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
push_left_out.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="-100%p" />
<alpha
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
向右滚动:
push_right_in.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="-100%p"
android:toXDelta="0" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
push_right_out.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="100%p" />
<alpha
android:duration="300"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
旋转动画:
hyperspace_in.xml:
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromAlpha="0.0"
android:startOffset="1200"
android:toAlpha="1.0" />
hyperspace_out.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:duration="700"
android:fillAfter="false"
android:fillEnabled="true"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.4"
android:toYScale="0.6" />
<set android:interpolator="@android:anim/accelerate_interpolator">
<scale
android:duration="400"
android:fillAfter="true"
android:fillBefore="false"
android:fillEnabled="true"
android:fromXScale="1.4"
android:fromYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:toXScale="0.0"
android:toYScale="0.0" />
<rotate
android:duration="400"
android:fillAfter="true"
android:fillBefore="false"
android:fillEnabled="true"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="700"
android:toDegrees="-45"
android:toYScale="0.0" />
</set>
</set>
淡入淡出效果我们可以调取系统的:
android.R.anim.fade_in
android.R.anim.fade_out
完整的Demo地址:http://download.csdn.net/detail/ming_147/9732144
- TextView各种滚动动画实现
- android TextView 垂直滚动 用动画实现
- TextView 滚动如何实现
- TextView实现滚动效果
- TextView实现字体滚动
- TextView 实现 滚动条
- 实现TextView滚动
- TextView实现滚动播放
- Android:TextView的垂直滚动效果和上下滚动效果,原生动画实现
- 自定义数字滚动动画的TextView
- Android属性动画实现TextView类似支付宝余额数字滚动
- Android TextView实现滚动效果
- TextView滚动功能的实现
- 实现上下滚动的TextView
- 实现上下滚动的TextView
- 实现上下滚动的TextView
- Android TextView实现滚动条
- TextView,Button实现滚动字幕
- C# sha1加密
- 设计模式-工厂模式
- (热死你)Resin https ssl Linux 配置,实战可用
- python基本变量
- Halcon如何制作标定板
- TextView各种滚动动画实现
- TCP的那些事儿(下)
- Js获取日期、月初时的前天、昨天、今天、明天
- 【AI每日播报】自动驾驶占领CES 2017
- 【软件后门】qq足迹 - qq应用授权管理
- iOS 去除NavigationController导航条最下面的一条横线
- Markdown使用
- WeChat资料
- 2017网易秋招笔试题