asysbang

 找回密码
 立即注册
查看: 7006|回复: 0
打印 上一主题 下一主题

文字特效

[复制链接]

520

主题

2

好友

6551

积分

管理员

Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2014-2-13 16:56:30 |只看该作者 |倒序浏览
转载请注明  www.asysbang.com

可以考虑给文字加一些特效,这样看起来更酷

package com.asysbang.uidemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.MaskFilter;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;

public class TextEffectView extends View {

    private Paint textPaint;
   
     private MaskFilter  mEmboss;

    private static final String text = "你好!今天是星期三!";

    private static final int MSG_IN = 10;

    private static final int EFFECT_SHOW_DELAY = 200;

    private static final int TEXT_SIZE_1 = 80;

    private static final int TEXT_SIZE_2 = 120;

    private static final int START_X = 30;

    private static final int START_Y = 400;

    private int curPosition = 0;

    private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            curPosition++;
            if (curPosition <= text.length() * 2) {
                invalidate();
                mHandler.sendEmptyMessageDelayed(MSG_IN, EFFECT_SHOW_DELAY);
            }
        }

    };

    public TextEffectView(Context context, AttributeSet attrs) {
        super(context, attrs);
        textPaint = new Paint();
        textPaint.setColor(Color.CYAN);
        textPaint.setStyle(Paint.Style.STROKE);
        textPaint.setStrokeJoin(Paint.Join.ROUND);
        textPaint.setStrokeCap(Paint.Cap.ROUND);
        textPaint.setStrokeWidth(2);
        
        mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 },
                0.4f, 6, 3.5f);
        textPaint.setMaskFilter(mEmboss);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        String str = text.substring(0, curPosition / 2);
        System.out.println("==========" + str);
        textPaint.setTextSize(TEXT_SIZE_1);
        canvas.drawText(str, START_X, START_Y, textPaint);
        if (curPosition % 2 > 0) {
            textPaint.setTextSize(TEXT_SIZE_2);
            String str1 = text.substring(curPosition / 2, curPosition / 2 + 1);
            canvas.drawText(str1, START_X / 2 + TEXT_SIZE_2 - TEXT_SIZE_1 + TEXT_SIZE_1 * curPosition / 2, START_Y, textPaint);
        }
    }

    public void textIn() {
        mHandler.removeMessages(MSG_IN);
        curPosition = 0;
        mHandler.sendEmptyMessage(MSG_IN);
    }

}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|aSys-帮 ( 京ICP备13033689号 )

GMT+8, 2026-1-28 19:06 , Processed in 0.039997 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部