您的位置:首页 > 其它

自定义信息提示条tooltipbar

2014-06-12 18:59 183 查看
最近在公司忙的焦头烂额,做一些自己的控件,千奇百怪的,现在拿出一部分分享给大家。

信息提示条,可以用来显示一些文本信息,并通过服务器端传递的一些json串,解析过之后循环显示出来,通过每一次点击textview以动画的形式跳到另一个textview上并显示出来,循环往复。

不多说了,直接上代码,有注释,无须解释。

package com.example.atooltipbar;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.TextView;

/**
* @author xiaochj
* @Date 2014-6-2 上午10:45:33
* @version
*/
public class Tooltipbar extends TextView {

private AnimationSet mset = null;// 淡入淡出对象
private Animation mscale = null;// 伸缩对象

private int index = 0;

public static List<String> list = new ArrayList<String>();// 存储的数据

public Tooltipbar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public Tooltipbar(Context context, AttributeSet attrs) {
super(context, attrs);
}

public Tooltipbar(Context context) {
super(context);
this.setGravity(Gravity.CENTER);
this.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
listGet();// 循环改变文本内容
animationFor();// 动画效果
}
});
}

/**
* 循环改变文本内容
*/
public void listGet() {
if (list.size() == 0) {// 如果没有文本,则循环显示默认文本
return;
} else {
setText(list.get(index));// 从list中取元素显示出来
index++;
if (index == list.size()) {// 循环显示内容
index = 0;
}
}
}

/**
* 动画效果
*/
public void animationFor() {
// 每点击一次,产生一个随机数,将数控制在10以内,通过判断来决定做哪种动画效果
Random rad = new Random();
int k = rad.nextInt();
int j = Math.abs(k % 10);

if (j == 1 || j == 3 || j == 5 || j == 7 || j == 9) {
mset = new AnimationSet(true);
// 淡入
AlphaAnimation malpha1 = new AlphaAnimation(0, 1);
malpha1.setDuration(3000);// 3s
mset.addAnimation(malpha1);
startAnimation(mset);
} else {
// 伸缩
mscale = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
mscale.setDuration(3000);// 3s
startAnimation(mscale);
}

}

/**
* 设置默认显示文本
* @param value
*/
public void setOrigainText(String value){
this.setText(value);
}

/**
* 从数据源取到数据,存到list中使用
*
* @param value
*/
public void setFromSource(String value) {
try {
JSONObject jsonObject = new JSONObject(value);
JSONArray jsonArray = jsonObject.optJSONArray("select");
if(jsonArray==null) {
return;
}
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject data = (JSONObject) jsonArray.opt(i);
list.add(data.getString("value"));// 加入数据
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}


使用类如下:

package com.example.atooltipbar;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

private LinearLayout layout;
private Tooltipbar mTooltipbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layout = new LinearLayout(this);
setContentView(layout);
initTooltipbar();
}

/**
* 生成一个滚动条
*/
public void initTooltipbar() {
mTooltipbar = new Tooltipbar(this);
mTooltipbar.setOrigainText("hello,world!");//默认显示文本信息
//循环显示文本
mTooltipbar.setFromSource("{select:[{value:abc},{value:efg},{value:hiii},{value:jklm}]}");
mTooltipbar.setTextSize(30);
layout.addView(mTooltipbar);
}
}






第一次写博客,望多指教,不喜勿喷,呵呵~

该工程下载地址:http://download.csdn.net/download/sword_cx/7490245
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐