您的位置:首页 > 移动开发 > Android开发

Android_YouthArea之ApeendTextView

2016-01-22 19:37 393 查看
这次给我自己的项目打个广告:http://sj.qq.com/myapp/detail.htm?apkName=com.youthcommunity

这款APP 不同于SoHOT是积极的,是年轻人的信息和故事还有一些科技新闻等等…

希望大家支持…如果后期效果可以我会把这个系列的博客继续做下去.

从 引导页分析.最后并开源

先来一个首页的效果吧



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

[b]*[/b]实现思路

1,二话不说先写一个View 继承TextView

2,书写自定义属性

3,初始化自定义属性

4,起一个线程用来间隔时间设置textview的文字

5,设置一个文字结束的监听用来todo something….

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

先来看看自定义属性

就一个就是我们需要展示的text,注意用的时候不要写成text=”xxxx”

那样就成普通的textview了



我们的attrs文件,超简单就一个属性



接下来就是我们的appendtextview的 重要的一些变量

一个是用来展示的文字

一个是用来操作文字的字符串buffer

一个就是回调拼接完毕的



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



这是最后的init方法用来显示一个个拼接的文字



最后的效果就是刚开始进来打广告的时候的效果,

欢迎大家拍砖和支持谢谢了

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

[code]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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: