这次给我自己的项目打个广告:http://sj.qq.com/myapp/detail.htm?apkName=com.youthcommunity

这款APP 不同于SoHOT是积极的,是年轻人的信息和故事另一些科技新闻等等…
希望大家支持…假设后期效果能够我会把这个系列的博客继续做下去.
从 引导页分析.最后并开源

先来一个首页的效果吧
首次进入欢迎页

这次就带来刚进入的时候那个一个个字显示的小控件暂且叫他appendtextview吧 ,

*实现思路

1,二话不说先写一个View 继承TextView
2,书写自己定义属性
3,初始化自己定义属性
4,起一个线程用来间隔时间设置textview的文字
5,设置一个文字结束的监听用来todo something….

ok 分析完成.让我们来完成这个小东西

先来看看自己定义属性

就一个就是我们须要展示的text,注意用的时候不要写成text=”xxxx”
那样就成普通的textview了

自己定义属性

我们的attrs文件,超简单就一个属性
这里写图片描写叙述

接下来就是我们的appendtextview的 重要的一些变量
一个是用来展示的文字
一个是用来操作文字的字符串buffer
一个就是回调拼接完成的

这里写图片描写叙述

拿到自己定义属性在构造函数中

这里写图片描写叙述

这是最后的init方法用来显示一个个拼接的文字
这里写图片描写叙述

最后的效果就是刚開始进来打广告的时候的效果,
欢迎大家拍砖和支持谢谢了

这也不是项目就一个类而已就不上传源代码了把这个类粘贴到这里

package com.youthcommunity.ui.customview;

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.TextView;

import com.youthcommunity.R;

import java.util.ArrayList;

/**
 * Created by jsion on 16/1/8.
 */
public class AppendTextView extends TextView {
    private static final int APPEND_FLAG = 10;
    private static final int APPEND_FINISHI = 23;
    private String textForShow;
    private StringBuffer textForAppend;
    private int textLength;
    private ArrayList<String> allTextChars;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case APPEND_FLAG:
                    setText(((StringBuffer) msg.obj).toString());
                    break;
                case APPEND_FINISHI:
                    // 设置完成
                    if (onHasFinishSet != null) {
                        onHasFinishSet.hasFinishSet();
                    }
                    break;
            }
        }
    };


    public interface OnHasFinishSet {
        void hasFinishSet();
    }

    private OnHasFinishSet onHasFinishSet;

    public void setOnHasFinishSet(OnHasFinishSet onHasFinishSet) {
        this.onHasFinishSet = onHasFinishSet;
    }

    public AppendTextView(Context context) {
        this(context, null);
    }

    public AppendTextView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AppendTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AppendTextView, defStyleAttr, 0);
        int n = a.getIndexCount();
        for (int i = 0; i < n; i++) {
            int attr = a.getIndex(i);
            switch (attr) {
                case R.styleable.AppendTextView_titleText:
                    textForShow = a.getString(attr);
                    break;
            }
        }
        a.recycle();
        init();
    }

    /**
     * 获取自己定义属性后初始化
     */
    private void init() {
        textForAppend = new StringBuffer();
        textLength = textForShow.length();
        allTextChars = new ArrayList<String>();


        for (int i = 0; i < textLength; i++) {
            allTextChars.add(textForShow.charAt(i) + "");
        }

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int j = 0; j < allTextChars.size(); j++) {
                    Message msg = handler.obtainMessage();
                    msg.what = APPEND_FLAG;
                    msg.obj = textForAppend.append(allTextChars.get(j));
                    handler.sendMessage(msg);
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                Message msg = handler.obtainMessage();
                msg.what = APPEND_FINISHI;
                handler.sendMessage(msg);
            }
        }).start();


    }
}

究竟所有结束.希望你们继续支持SoHoT>>>>>>>>>SoHOT

posted on 2017-07-22 18:10  lxjshuju  阅读(256)  评论(0编辑  收藏  举报