如何从左到右android为textview应用颜色过渡?

Sha*_*dow 6 android textview android-animation

嗨,我需要为 textview 应用颜色过渡,然后移动到下一个屏幕。我尝试过的是,我尝试使用可跨越字符串在 textview 中使用静态颜色,但我无法在 textview 上应用动态颜色过渡。这是我尝试过的。

public class AppActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView tv = (TextView) findViewById(R.id.text);
    Spannable text = new SpannableStringBuilder("Loading..");
    setSpan(tv, text);
    tv.setText(text);
}

private void setSpan(TextView tv, Spannable text) {
    int blueColor = 0xff0000ff;
    int redColor = 0xffff0000;
    ForegroundColorSpan blue = new ForegroundColorSpan(blueColor);
    ForegroundColorSpan red = new ForegroundColorSpan(redColor);
    HalfColorApply o = new HalfColorApply("o", tv, blueColor, redColor);
    text.setSpan(blue, 0, 1, 0);
    text.setSpan(o, 1, 2, 0);
    text.setSpan(red, 2, text.length(), 0);
    }

 class HalfColorApply extends DynamicDrawableSpan {
    private final static String TAG = "DrawableSpanTest";
    Picture mPicture;

    public HalfColorApply(String text, TextView tv, int c0, int c1) {
        super(ALIGN_BASELINE);
        mPicture = new Picture();
        TextPaint p = tv.getPaint();
        Rect bounds = new Rect();
        p.getTextBounds(text, 0, text.length(), bounds);
        float width = p.measureText(text);
        float height = bounds.height();
        float y = height;
        Canvas c = mPicture.beginRecording((int) width, (int) height);
        c.save(Canvas.CLIP_SAVE_FLAG);
        // c.drawColor(0x[masked]);
        p = new TextPaint(p);
        p.setColor(c0);
        c.clipRect(0, 0, width / 2, height, Region.Op.REPLACE);
        c.drawText(text, 0, y, p);
        p.setColor(c1);
        c.clipRect(width / 2, 0, width, height, Region.Op.REPLACE);
        c.drawText(text, 0, y, p);
        c.restore();
        mPicture.endRecording();
    }

    @Override
    public Drawable getDrawable() {
        PictureDrawable d = new PictureDrawable(mPicture);
        d.setBounds(0, 0, mPicture.getWidth(), mPicture.getHeight());
        return d;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这是我在固定文本中应用的屏幕截图。我需要进行颜色转换才能在 textview 上移动。

提前致谢。

在此处输入图片说明

Sha*_*dow 0

找到解决方案。

public class SplashActivity extends Activity {
private TextView textView;
private Handler handler;
private long startTime, currentTime, finishedTime = 0L;
private int duration = 22000 / 4;// 1 character is equal to 1 second. if want to
                         // reduce. can use as divide
                         // by 2,4,8
private int endTime = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.test);
    textView = (TextView) findViewById(R.id.textView1);
    textView.setText("Loading.Please wait...");// length of string is 22
    handler = new Handler();
    startTime = Long.valueOf(System.currentTimeMillis());
    currentTime = startTime;

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            currentTime = Long.valueOf(System.currentTimeMillis());
            finishedTime = Long.valueOf(currentTime)
                    - Long.valueOf(startTime);

            if (finishedTime >= duration + 30) {
                Toast.makeText(SplashActivity.this, "Move to next screen",
                        Toast.LENGTH_LONG).show();
            } else {
                endTime = (int) (finishedTime / 250);// divide this by
                // 1000,500,250,125
                Spannable spannableString = new SpannableString(textView
                        .getText());
                spannableString.setSpan(new ForegroundColorSpan(
                        Color.YELLOW), 0, endTime,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

                textView.setText(spannableString);
                handler.postDelayed(this, 10);
            }
        }
    }, 10);
}
Run Code Online (Sandbox Code Playgroud)

}

在此输入图像描述