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_itemmContent);
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 = 0a < 20a++) {
    contentList.add("我是测试数据+ a);
}


为ViewFlipper添加view,并启动ViewFlipper:


mViewFlipper = (ViewFlipper) findViewById(R.id.flipper);


for (int a = 0a < 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<?> parentView 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

0 0
原创粉丝点击