自定义信息提示条tooltipbar

最近在公司忙的焦头烂额,做一些自己的控件,千奇百怪的,现在拿出一部分分享给大家。

信息提示条,可以用来显示一些文本信息,并通过服务器端传递的一些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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值