zoukankan      html  css  js  c++  java
  • Android_YouthArea之ApeendTextView

    这次给我自己的项目打个广告: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

  • 相关阅读:
    spring boot 在idea中实现热部署
    spring boot jar的生成
    mongodb windows 开机启动
    使用阿里云RDS
    net core 使用ef生成实体类(SqlServer)
    在window下搭建即时即用的hyperledger fabric 的环境
    NET实现谷歌OCR的使用记录(CLOUD VISION API)
    kali 系列学习12-使用Wifite破解无线网络
    kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件
    kali 系列学习09-Kali-linux设置ProxyChains
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7222164.html
Copyright © 2011-2022 走看看