Android特效专辑(三)——自定义不一样的Toast
Android特效专辑(三)——自定义不一样的Toast
大家都知道,Android的控件有时候很难满足我们的需求,所以我们需要自定义View。自定义的方式很多,有继承原生控件也有直接自定义View的,今天写的是自定义的Toast,当然,这个不是复写Toast,是换一种表达形式,哈哈,后续会增加自定义View的方方面面
这里啰嗦几句,我看到网上很多教程写的很不详细,就像是直接CV过来的一样,所以有时间我就会把我需要的东西写起来,然后尽可能的描述的清楚一点,以后我工作用到了就可以直接拿来用了,同时也可以把有用的星系分享给大家,这就是我写博客 的初衷了,经常去墙外面找的好例子,我也是摸透了才放在我博客上,如果以后有疑问或者不懂的,可以加我QQ沟通
先来看看效果图吧
是不是挺好看的,如果你看过Toast的源码就会知道,他主要是用了WindowManager,我们也直接来写一个
TabToast
package com.lgl.toast;
import android.content.Context;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class TabToast {
/**
* Toast字体大小
*/
private static final float DEFAULT_TEXT_SIZE = 14;
/**
* Toast字体颜色
*/
private static final int DEFAULT_TEXT_COLOR = 0xffffffff;
/**
* Toast背景颜色
*/
private static final int DEFAULT_BG_COLOR = 0xE6f5695a;
/**
* Toast的高度(单位dp)
*/
private static final float DEFAULT_TOAST_HEIGHT = 50.0f;
private static Context mContext;
private volatile static TabToast mInstance;
private static Toast mToast;
private View layout;
private TextView tv;
public TabToast(Context context) {
mContext = context;
}
/**
* 单例模式
*
* @param context
* 传入的上下文
* @return TabToast实例
*/
private static TabToast getInstance(Context context) {
if (mInstance == null) {
synchronized (TabToast.class) {
if (mInstance == null) {
mInstance = new TabToast(context.getApplicationContext());
}
}
}
return mInstance;
}
private static void getToast(int duration) {
//设置位置int gravity, int xOffset, int yOffset
if (mToast == null) {
mToast = new Toast(mContext);
mToast.setGravity(Gravity.BOTTOM, 0, 0);
//设置显示时间
mToast.setDuration(duration == Toast.LENGTH_LONG ? Toast.LENGTH_LONG
: Toast.LENGTH_SHORT);
}
}
public static void makeText(Context context, String text) {
makeText(context, text, Toast.LENGTH_SHORT);
}
public static void makeText(Context context, String text, int duration) {
getInstance(context);
getToast(duration);
if (mInstance.layout == null || mInstance.tv == null) {
LinearLayout container = new LinearLayout(mContext);
LinearLayout.LayoutParams rootParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
container.setLayoutParams(rootParams);
container.setBackgroundColor(DEFAULT_BG_COLOR);
container.setGravity(Gravity.CENTER);
mInstance.tv = new TextView(mContext);
LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(
getScreenWidth(mContext), dp2px(DEFAULT_TOAST_HEIGHT));
mInstance.tv.setLayoutParams(tvParams);
mInstance.tv.setPadding(dp2px(5), dp2px(2), dp2px(5), dp2px(2));
mInstance.tv.setGravity(Gravity.CENTER);
mInstance.tv.setTextColor(DEFAULT_TEXT_COLOR);
mInstance.tv.setMaxLines(2);
mInstance.tv.setEllipsize(TextUtils.TruncateAt.END);
mInstance.tv.setBackgroundColor(DEFAULT_BG_COLOR);
mInstance.tv.setTextSize(DEFAULT_TEXT_SIZE);
container.addView(mInstance.tv);
mInstance.layout = container;
mToast.setView(mInstance.layout);
}
mInstance.tv.setText(text);
mToast.show();
}
/**
* dp转px
*
* @param value
* dp
* @return px
*/
public static int dp2px(float value) {
float scale = mContext.getResources().getDisplayMetrics().density;
return (int) (value * scale + 0.5f);
}
/**
* 获得屏幕宽度
*
* @param context
* Context
* @return px
*/
public static int getScreenWidth(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
float density = outMetrics.density;
return (int) (outMetrics.widthPixels * density);
}
}
然后直接调用就可以了
TabToast.makeText(MainActivity.this, "自定义Toast");
Demo下载地址:http://download.csdn.net/detail/qq_26787115/9391760
Android特效专辑(三)——自定义不一样的Toast的更多相关文章
- Android特效专辑(五)——自定义圆形头像和仿MIUI卸载动画—粒子爆炸
Android特效专辑(五)--自定义圆形头像和仿MIUI卸载动画-粒子爆炸 好的,各位亲爱的朋友,今天讲的特效还是比较炫的,首先,我们会讲一个自定义圆形的imageView,接着,我们会来实现粒子爆 ...
- Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View
Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...
- Android特效专辑(十一)——仿水波纹流量球进度条控制器,实现高端大气的主流特效
Android特效专辑(十一)--仿水波纹流球进度条控制器,实现高端大气的主流特效 今天看到一个效果挺不错的,就模仿了下来,加上了一些自己想要的效果,感觉还不错的样子,所以就分享出来了,话不多说,上图 ...
- Android特效专辑(九)——仿微信雷达搜索好友特效,逻辑清晰实现简单
Android特效专辑(九)--仿微信雷达搜索好友特效,逻辑清晰实现简单 不知不觉这个春节也已经过完了,遗憾家里没网,没能及时给大家送上祝福,今天回到深圳,明天就要上班了,小伙伴们是不是和我一样呢?今 ...
- Android特效专辑(八)——实现心型起泡飞舞的特效,让你的APP瞬间暖心
Android特效专辑(八)--实现心型起泡飞舞的特效,让你的APP瞬间暖心 马上也要放年假了,家里估计会没网,更完这篇的话,可能要到年后了,不过在此期间会把更新内容都保存在本地,这样有网就可以发表了 ...
- Android特效专辑(七)——飞机升空特效,一键清理缓存,灵活运用动画会有不一样的感受
Android特效专辑(七)--飞机升空特效,一键清理缓存,灵活运用属性动画 最近的几篇博文反响还不错,也会继续的写下去的,关于这些特效的专辑,大多数也是借鉴大神的,最近由于工作的关系,会深入的了解一 ...
- Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命
Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/li ...
- Android特效专辑(十)——点击水波纹效果实现,逻辑清晰实现简单
Android特效专辑(十)--点击水波纹效果实现,逻辑清晰实现简单 这次做的东西呢,和上篇有点类似,就是用比较简单的逻辑思路去实现一些比较好玩的特效,最近也是比较忙,所以博客更新的速度还得看时间去推 ...
- Android特效专辑(四)——APP主页框架TabHost绑定ViewPager的替换者TabLayout
Android特效专辑(四)--APP主页框架TabHost绑定ViewPager的替换者TabLayout 现在很多app都在追求简单明了,功能又要强大,不过我还是喜欢之前的app风格,就是TabH ...
随机推荐
- FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分
===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...
- Android布局中ScrollView与ListView的冲突的最简单方法
看到网上流行的一种使用方法是: public class Utility { public static void setListViewHeightBasedOnChildren(ListView ...
- Python中使用rrdtool结合Django进行带宽监控
我们有个网关需要做下带宽监控,能获取这个数据的唯一方法就是登录到管理界面查看.然后咱就写了个模拟登录的爬虫,定时抓取数据用rrdtool存储,最后通过Django来展示.这里就涉及了python的rr ...
- [supervisor] 使用小记(入门教程)
之前到现在很久没有用了,还是从安装说下,做个简单的实验,系统为Ubuntu14.04 快速安装配置 sudo pip_python install supervisor sudo echo_super ...
- Mat, IplImage, CvMat, Cvarr关系及元素获取
自己目前正打算整理opencv数据结构之间关系,寻寻觅觅之间,发现这篇博文很全面,总结得很好,故转之.红色部分不对,自己已修改! 原文地址:http://blog.csdn.net/abcjennif ...
- Tomcat如何检测内存泄漏
一般情况下,如果我们重启web应用是通过重启tomcat的话,则不存在内存泄漏问题.但如果不重启tomcat而对web应用进行重加载则可能会导致内存泄漏,因为重加载后有可能会导致原来的某些内存无法让G ...
- 【unix网络编程第三版】阅读笔记(三):基本套接字编程
unp第三章主要介绍了基本套接字编程函数.主要有:socket(),bind(),connect(),accept(),listen()等. 本博文也直接进入正题,对这几个函数进行剖析和讲解. 1. ...
- ROS_Kinetic_18 使用V-Rep3.3.1和Matlab2015b(vrep_ros_bridge)续
ROS_Kinetic_18 使用V-Rep3.3.1和Matlab2015b(vrep_ros_bridge)续 上一节配置的v-rep在ros kinetic中是可以看图像,并订阅主题的,但是无法 ...
- Java由先序序列和中序序列还原二叉树
还原本来的二叉树并不是一个非常简单的事,虽然思想比较简单,但过程却是比较繁琐.下面我拿先序序列和中序序列来讲一下原理吧. 从先序序列中我们一下子就可以得到二叉树的根节点是第一个元素,然后再中序序列中我 ...
- 清除行内元素之间的HTML空白
原文连接:Remove Whitespace Between Inline-Block Elements 原文日期: 2013年8月27日 翻译日期: 2013年8月28日 至今我还记得年轻是在IE6 ...