关闭

自定义重写Toast

2082人阅读 评论(1) 收藏 举报
分类:
使用方法以及说明写在代码中的注释中
/**
 * 
 * @author liu
 *	本类调用方法new MyToast(context, "送积分:", "200", 20).showLonger();
 */
public class MyToast extends Toast {

    public MyToast(Context context, String message,String creit, int textsize) {
    	
        super(context);
        if (context == null) {
            return;
        }
        //设置外层容器
        RelativeLayout mainLayout = new RelativeLayout(context);
        ViewGroup.LayoutParams mainP = new ViewGroup.LayoutParams (ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        mainLayout.setLayoutParams(mainP);
        try {
        	//从assets文件夹中进行图片加载
			InputStream open = context.getResources().getAssets().open("toast.png");
			Drawable background=Drawable.createFromStream(open, "toast.png");
			mainLayout.setBackground(background);
		} catch (IOException e) {
			//找不到图片或者加载异常时设置背景色为黑色
			mainLayout.setBackgroundColor(Color.BLACK);
		}
        
        TextView content = new TextView(context);
        //PhoneUtil.getResolution(context)为获取屏幕分辨率的方法,根据屏幕的宽度计算toast显示的宽度
        int width=PhoneUtil.getResolution(context)[0]/2;
        int height=(width*2)/5;
        //设置宽和高
        RelativeLayout.LayoutParams contentP = new RelativeLayout.LayoutParams(width,height);
        content.setLayoutParams(contentP);

        //toast中显示的内容
        String str=message+creit;
        SpannableStringBuilder style=new SpannableStringBuilder(str); 
        //对于toast中的文字设置不同的颜色,message设置为白色,creit设置为红色
        style.setSpan(new ForegroundColorSpan(Color.WHITE),0,message.length()-1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
//设置字体大小
        style.setSpan(new AbsoluteSizeSpan(60), message.length(), str.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        style.setSpan(new ForegroundColorSpan(Color.RED),message.length(),str.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        
        content.setText(style);
        content.setTextSize(textsize);
        //设置字体居中
        content.setGravity(Gravity.CENTER);
        mainLayout.addView(content);

        //给字体设置动画效果
        TranslateAnimation alphaAnimation2 = new TranslateAnimation(-20f, 0, 0, 0);
        alphaAnimation2.setDuration(90);
        alphaAnimation2.setRepeatCount(9);
        alphaAnimation2.setRepeatMode(Animation.REVERSE);
        content.setAnimation(alphaAnimation2);

        alphaAnimation2.start();
        //Utils.convertToScreenPixels为根据分辨率及显示密度计算显示数值的方法
        setGravity(Gravity.BOTTOM, 0, Utils.convertToScreenPixels(70, 1));
        setDuration(Toast.LENGTH_LONG);//设置长显示
        setView(mainLayout);
    }
    
    public void showLonger() {
    	//把Toast.show添加到消息队列中并显示
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                show();
            }
        //显示延迟时间
        }, 1000);
        
    }
}


1
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:222788次
    • 积分:3171
    • 等级:
    • 排名:第10785名
    • 原创:98篇
    • 转载:29篇
    • 译文:0篇
    • 评论:64条
    最新评论