package com.example.materialtest.widget; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Paint.FontMetrics; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.support.v7.widget.CardView; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.ImageView; @SuppressLint("NewApi") public class LyricTextView extends View { private static final String TAG = "LyricTextView"; private Paint paint = new Paint(); LyricTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } public LyricTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public LyricTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LyricTextView(Context context) { super(context); init(); } private void init() { // paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); paint.setColor(Color.WHITE); paint.setAntiAlias(true); paint.setTextSize(30); setBackgroundColor(Color.GRAY); new Thread() { public void run() { while (true) { try { Thread.sleep(100); len++; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } postInvalidate(); if (len >= 20) { len = 0; } } }; }.start(); } int len = 0; @Override protected void onDraw(Canvas canvas) { String text = "1��22����������������������������������������"; paint.setColor(Color.WHITE); String oldText = text.substring(0, len); float width = paint.measureText(oldText); FontMetrics fontMetrics = paint.getFontMetrics(); canvas.drawText(text.substring(len), 30 + width, 30, paint); paint.setColor(Color.RED); canvas.drawText(oldText, 30, 30, paint); // Log.d(TAG, "text onDraw" + metrics.ascent + "," + metrics.descent + // "," + metrics.top + "," + metrics.bottom); } private Bitmap drawableToBitamp(Drawable drawable, int width) { int h = getHeight(); Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565; Bitmap bitmap = Bitmap.createBitmap(width, h, config); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, width, h); drawable.draw(canvas); return bitmap; } }