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
英文地址,請注明出處:http://en.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字符集就不能滿足…