- 一 - 水波纹过渡特效(首页)
- 二 - ViewPager 渲染背景颜色渐变(引导页)
- 三 - 自定义不一样的 Toast
- 四 - APP 主页框架 TabHost 绑定 ViewPager 的替换者 TabLayout
- 五 - 自定义圆形头像和仿 MIUI 卸载动画 - 粒子爆炸
- 六 - 仿 QQ 聊天撒花特效,无形装逼,最为致命
- 七 - 飞机升空特效,一键清理缓存,灵活运用动画会有不一样的感受
- 八 - 实现心型起泡飞舞的特效,让你的 APP 瞬间暖心
- 九 - 仿微信雷达搜索好友特效,逻辑清晰实现简单
- 十 - 点击水波纹效果实现,逻辑清晰实现简单
- 十一 - 仿水波纹流量球进度条控制器,实现高端大气的主流特效
- 十二 - 仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的 View
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
三 - 自定义不一样的 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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论