android dp转px的公式_Android特效专辑——自定义不一样的Toast

大家都知道,Android的控件有时候很难满足我们的需求,所以我们需要自定义View。自定义的方式很多,有继承原生控件也有直接自定义View的,今天写的是自定义的Toast,当然,这个不是复写Toast,是换一种表达形式,哈哈,后续会增加自定义View的方方面面

先来看看效果图吧

0cf9cd18b23a5b099d2222a2d02a61b7.gif

是不是挺好看的,如果你看过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 yOffsetif (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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/540088.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/540088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

code iban 是有什么组成_深入浅出Zookeeper(四):客户端的请求在服务器中经历了什么...

作者 泊浮目 沃趣科技高级研发工程师出品 沃趣科技1. 前言当我们向zk发出一个数据更新请求时,这个请求的处理流程是什么样的?zk又是使用了什么共识算法来保证一致性呢?带着这些问题,我们进入今天的正文。2. 设计模式&#xff1…

Centos7: 配置IO调度

今天有同事问我个问题:“CentOS7如何修改IO默认的调度”,我这里简单整理下如何调整的方法: 1、查看CentOS7下IO支持的调度 1234[rootkvm02 ~]# dmesg | grep -i scheduler [ 16.900459] io scheduler noop registered[ 16.900473] io sch…

启动activemq_「Java」 - SpringBoot amp; ActiveMQ

一、消息队列消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。目前在生产环境中使用较多的消息队列有ActiveMQ、Rabbit…

永不休眠怎么设置_电脑休眠后应该怎样唤醒?

可能有朋友会碰到这种情况,电脑屏幕显示正在休眠,而且不停的转圈,这是怎么回事,如何唤醒?下面让坚哥为大家分析一下吧。电脑开机显示休眠一般根据以下几种情况进行处理:1、正常电脑休眠:一般的是按一下电源…

配置ssl证书_Mysql配置ssl证书

本环境基于mysql5.6配置,通过openssl生成证书进行配置一、确认环境信息1、查看数据库版本mysql> select version();-----------| version() |-----------| 5.6.36 |-----------2、查看数据库是否支持ssl配置mysql> show variables like have%ssl%;-----------…

echarts散点图中大小_echarts在地图上绘制散点图(任意点)

项目需求:在省份地图上绘制散点图,散点位置不一定是哪个城市或哪个区县,即任意点通过查询官网文档,找到一个与需求类似的demo:,更改代码,将中国地图替换为省份地图,省份地图的js代码…

如何让图片充满excel单元格_如何在Excel单元格建立下拉菜单

对于一些常用的数据我们往往会希望能够尽量快速的输入,下拉菜单就是一个最简单的解决办法。那么如何实现下拉菜单呢?跟随以下步骤,建立属于自己的下拉菜单吧!如何建立下拉菜单?一、确定内容:在单元格中&…

pgsql中float4导致java程序精度丢失_Java基础系列02

注释Java中支持三种注释:1.单行注释以//开始换行结束。2.多行注释以/*开始,以*/结束。3.说明注释以/**开始,以*/结束。关键字关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。例如上篇文章中Hello…

python地理位置聚类_python – 用于聚类地理位置数据的DBSCAN

我有一个纬度和经度对的数据帧.这是我的数据帧外观.order_lat order_long0 19.111841 72.9107291 19.111342 72.9083872 19.111342 72.9083873 19.137815 72.9140854 19.119677 72.9050815 19.119677 72.9050816 19.119677 72.9050817 19.120217 72.9071218 19.120217 72.90712…

用idea建立jsp项目_用idea创建maven项目,配置tomcat详解

用idea创建maven项目,配置tomcat详解,电脑上得有jdk1.7,或者1.8,然后就是maven3.x吧,再有就是tomcat7以上下面就直接开始看图啦:这个我刚刚开始没注意细看,原来web app 的骨架有2个呢&#xff0…

求立方根_初一数学立方根考点详解,立足基础,把握题型,学会方法

初一数学实数部分,平方根和立方根这两部分的知识点比较的基础,但是考试中却是经常会考,并且有很多的“陷阱”,也是让学生猝不及防,今天我和同学们继续学习交流立方根的知识点,通过详解考点,帮助…

ctf音频yinxie_ctf-图片隐写术

文件隐藏常见文件头尾jpg 文件头FFD8FFE0 文件尾FFD9png 文件头89504E470D0A1A0A 文件尾AE426082gif 文件头47494638 文件尾003Bzip 文件头504B0304 文件尾rar 文件头Rar! 文件尾7zip 文件头7z集 文件尾文件分析工具binwalk,kali中集成工具,用于分析文件中所包含的内…

mysql负责均衡读写分离_MySQL读写分离之负载均衡

mysql官方文档中有这么一句话:MySQL Proxy is currently an Alpha release and should not be used within production environments.So。。。使用haproxy来做这些事,以下仅供参考:环境配置master 192.168.1.106 master1s…

mysql使用技巧_MySQL使用不得不看的几个小技巧

程序中写入的一行行的SQL语句,如果使用了一些优化小技巧,定能达到事半功倍的效果。1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有效方法之一。当同一个查询被执行多…

mysql oracle 数据类型转换_Mysql与Oracle之间的数据类型转换

[转]MYSQL 与 Oracle 之间的数据类型转换

rad linux下安装mysql_Linux(CentOS或RadHat)下MySQL源码安装

MySQL 5.6开始,需要使用g进行编译。cmake :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本。bison :MySQL语法解析器需要使用bison进行编译。ncurses-devel :用于终端操作的开发包。zlib …

mysql5.1数据库乱码_MySql5.1以上版本中文乱码的解决方法

在my.cnf内添加以下代码输出err日志信息:[safe_mysqld]err-log /var/log/mysqld.logpid-file /var/lib/mysql/localhost.localdomain.pid在shell中输入/bin/sh /usr/bin/mysqld_safe &启动mysql,shell输出如下:110328 11:39:55 mysqld_…

mysql 命令行批量sql_命令行中执行批量SQL的方法

基础信息介绍测试库:test;测试表:user;user表定义:CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,name char(30) NOT NULL,age int(11) NOT NULL,gender tinyint(1) DEFAULT 1 COMMENT 性别:1男;…

mysql双主数据一致性_MySQL双主一致性架构优化 | 架构师之路-阿里云开发者社区...

一、双主保证高可用MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。在一个MySQL数据库集群中可以设置两个主库,并设置双向同步,以冗…

spool导出姓名中文乱码_MySQL不同字符集转化标准—7步实现,杜绝乱码!

引言作为资深的DBA程序员,在工作中是否会遇到更这样的情况呢?原有数据库的字符集由于前期规划不足,随着业务的发展不能满足业务的需求。如原来业务系统用的是utf8字符集,后期有存储表情符号的需求,uft8字符集就不能满足…