首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不刷新的情况下为Android TextView添加动画,并且每次都用数组中的新文本填充它?

如何在不刷新的情况下为Android TextView添加动画,并且每次都用数组中的新文本填充它?
EN

Stack Overflow用户
提问于 2013-02-24 20:36:27
回答 4查看 1K关注 0票数 0

我愿意在安卓应用程序中创建一个新闻栏,我使用动画将TextView从左向右移动,并在每一轮中填充字符串数组中的新文本。我遇到了很多问题,我使用了5种以上的方法,但每种方法都有不好的行为。主要的问题是,当动画结束时,它会刷新textView,它看起来像是在闪烁,这不是用户友好的行为。

下面是一个代码片段:

代码语言:javascript
复制
     TextView my_text;
     Animation slideRight;      
     Animation slideLeft;
     String [] text = {"TwoOneOneOneOneOneOneOneOneOneTwo","OneTwoTwoTwoTwoTwoTwoTwoTwoTwoTwoOne",
        "OneThreeThreeThreeThreeThreeThreeThreeOne","OneFourFourFourFourFourFourFourOne",
        "OneFiveFiveFiveFiveFiveFiveFiveOne","OneSixSixSixSixSixSixSixOne",
        "OneSevenSevenSevenSevenSevenSevenSeveOne","OneEightEightEightEightEightEightEightOne",
        "OneNineNineNineNineNineNineNineOne"};

     int arr_length;
     int count = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    arr_length = text.length;

    slideRight = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);

    slideRight.setDuration(2000);
    slideRight.setRepeatCount(Animation.INFINITE);
    slideRight.setAnimationListener(slideRightListener);
    slideLeft = AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left);
    slideLeft.setDuration(2000);
    slideLeft.setAnimationListener(slideLeftListener);

    my_text = (TextView) findViewById(R.id.textView1);
    my_text.setVisibility(TextView.VISIBLE);
    my_text.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {       
            Toast.makeText(getApplicationContext(), my_text.getText(), Toast.LENGTH_SHORT).show();
        }
    });

    slideLeft.setAnimationListener(slideLeftListener);
    my_text.startAnimation(slideLeft);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

AnimationListener slideLeftListener = new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        my_text.setVisibility(TextView.VISIBLE);

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        my_text.setVisibility(TextView.VISIBLE);

    }

    @Override
    public void onAnimationEnd(Animation animation) {
        my_text.setVisibility(TextView.VISIBLE);
        my_text.startAnimation(slideRight);
    }
}; 

AnimationListener slideRightListener = new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {
        my_text.setVisibility(TextView.VISIBLE);
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        my_text.setVisibility(TextView.VISIBLE);
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        my_text.setVisibility(TextView.VISIBLE);
        if(count<arr_length)
        {               
            my_text.setText(text[count]);
            count+=1;
            my_text.startAnimation(slideLeft);
        }
        else
        {
            count=0;
            my_text.setText(text[count]);
            my_text.startAnimation(slideLeft);
        }

    }
}; 
 }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-05 19:40:17

我已经有了this link,我发现它对我来说很棒,可以根据我的需求进行定制。它使用HorizonalSlideshow。

票数 0
EN

Stack Overflow用户

发布于 2013-05-20 11:18:08

我觉得ViewFlipper更适合你。

票数 1
EN

Stack Overflow用户

发布于 2013-02-24 22:42:18

尝试添加setFillAfter(true),因为这可能会在动画结束时停止“刷新”行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15051788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档