方法一、
這裡用到了HorizontalScrollView嵌套TextView,上xml布局:
<HorizontalScrollView
android:id="@+id/horiSv"
android:layout_width="match_parent"
android:layout_height="70px"
android:background="@color/green"
android:scrollbars="none">
<TextView
android:id="@+id/noticeTv"
android:layout_width="wrap_content"
android:layout_height="70px"
android:gravity="center"
android:singleLine="true"
android:text=""
android:textColor="@color/white"
android:textSize="36sp" />
</HorizontalScrollView>
java代碼中的實作:
private HorizontalScrollView mNoticeScrollView;
private TextView mNoticeTv;
private TranslateAnimation mRigthToLeftAnim;
private final static float SCOLL_V = 0.2f;
mNoticeScrollView = (HorizontalScrollView) findViewById(R.id.horiSv);
mNoticeTv = (TextView) findViewById(R.id.noticeTv);
mNoticeTv.setFocusable(true);
String value = "<font color='white' size='24'>" + "收費标準:4小時/元" + "</font>";
mNoticeTv.setText(Html.fromHtml(value));
mNoticeTv.post(new Runnable() {
@Override
public void run() {
mRigthToLeftAnim = new TranslateAnimation(mNoticeScrollView.getWidth(), -mNoticeTv.getWidth(), 0, 0);
mRigthToLeftAnim.setRepeatCount(Animation.INFINITE);
mRigthToLeftAnim.setInterpolator(new LinearInterpolator());
mRigthToLeftAnim.setDuration((long) ((mNoticeScrollView.getWidth() + mNoticeTv.getWidth()) / SCOLL_V));
mNoticeTv.startAnimation(mRigthToLeftAnim);
}
});
方法二、
自定義TextView
public class FlashTextView extends TextView {
private int mViewWidth = 0;
private Paint mPaint;
private LinearGradient mLinearGradient;
private Matrix mGradientMatrix;
private int mTranslate;
public FlashTextView(Context context) {
super(context);
}
public FlashTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mViewWidth == 0) {
mViewWidth = getMeasuredWidth();
if (mViewWidth > 0) {
mPaint = getPaint();
mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{Color.GREEN, 0xA020F0, Color.BLUE}, null, Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
mGradientMatrix = new Matrix();
}
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mGradientMatrix != null) {
mTranslate += mViewWidth / 5;
if (mTranslate > 2 * mViewWidth) {
mTranslate = -mViewWidth;
}
mGradientMatrix.setTranslate(mTranslate, 0);
mLinearGradient.setLocalMatrix(mGradientMatrix);
postInvalidateDelayed(50);
}
}
}