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

Android_YouthArea之ApeendTextView的更多相关文章

随机推荐

  1. [转]在Storyboard中使用自定义的segue类型

    转自:http://my.oschina.net/u/728866/blog/92709 我们知道segue共有三种类型:push.modal以及custom.如下图:   很明显,这三种类型的作用分 ...

  2. myeclipse服务器"未能创建视图:抛出意外异常。"

    找到对应目录 Workspaces\.metadata\.plugins\org.eclipse.core.runtime\.settings 下的 com.genuitec.eclipse.ast. ...

  3. Win7下VS2010、IIS7配置常见问题收集

    一 在Win7下应按什么次序安装vs2010和iis7 win7推荐先安装iis7,再安装vs2010:如果次序反了,必须注册iis才可以用. IIS中ASP.NET的版本号此时可选的有1.1.2.0 ...

  4. Cryptography I 学习笔记 --- 基于陷门置换的公钥加密

    RSA算法的工作流程 1. 生成公钥私钥 生成两个素数p和q,计算n=p*q,计算φ(n)=n-p-q+1,然后生成e与d,使 e * d = 1 mod φ(n). 然后以(n, e)作为公钥,(n ...

  5. Linux 中/etc/profile、~/.bash_profile 环境变量配置及执行过程

    环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell.对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell.对于UNIX,可能是CShelll.环境变量是通过 ...

  6. AtCoder Beginner Contest 084 D - 2017-like Number【数论/素数/前缀和】

    D - 2017-like Number Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement W ...

  7. java.lang.StackOverflowError at org.eclipse.jetty.util.resource.Resource.<init>(Resource.java:40)

    今天做项目的时候,不知道哪根筋搭错了,多写了一句话,导致我忙活了一下午,各种百度,最后在朋友的帮助下,给了我思路,完美解决,不多说,上图. 我的登录页面引入了bootstrap.jsp的东西 解决问题 ...

  8. Wildcard Matching - LeetCode

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  9. 在Bonobo服务器里创建Repository(库)

    新建Repository步骤如下: 点击“库”链接,进入“库管理”页面,如下图所示: 在“库管理”页面点击“创建新库”按钮,进入“创建新库”页面,如下图所示: 点击“建立”按钮,会进入“库管理”页面, ...

  10. 缺少 Google API 秘钥,因此 Chromium 的部分功能将无法使用

    获取密钥(ID)教程: https://www.chromium.org/developers/how-tos/api-keys 获取密钥(ID)地址: https://cloud.google.co ...