直播原始碼網站,訊息圖示在收到訊息時展示訊息條數
直播原始碼網站,訊息圖示在收到訊息時展示訊息條數實現的相關程式碼
使用
<YourPackgaeName.NumberImageView android:layout_width="wrap_content" android:layout_height="45dp" android:paddingHorizontal="20dp" android:layout_marginVertical="10dp" android:src="@mipmap/ic_shop_sign" app:number="15" app:numberMarginRight="18dp" app:numberTextSize="12sp" />
原始碼
1.attrs.xml
<attr name="numbersTextSize" format="dimension|reference" /> <attr name="numberMarginTop" format="dimension|reference" /> <attr name="numberMarginRight" format="dimension|reference" /> <attr name="number" format="string|reference" /> <attr name="numberTextColor" format="color|reference" /> <attr name="numberTextSize" format="dimension|reference" /> <attr name="numberSolidColor" format="color|reference" /> <declare-styleable name="NumberImageView"> <attr name="numberMarginTop" /> <attr name="numberMarginRight" /> <attr name="numberSolidColor" /> <attr name="numberTextColor" /> <attr name="numberTextSize" /> <attr name="number" /> </declare-styleable>
2.程式碼
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.support.v7.widget.AppCompatImageView; import android.support.v7.widget.AppCompatTextView; import android.text.TextUtils; import android.util.AttributeSet; /** * 圓點數字 + 文字 */ public class NumberTextView extends AppCompatTextView { private Paint paint; //圓點文字 private String text = "0"; //圓點文字大小 private int textSize = 16; //圓點文字顏色 private int textColor = Color.WHITE; //圓點顏色 private int solidColor = Color.RED; //圓點半徑大小 private int radius = 18; //圓點文字上間距 private int textMarginTop = 10; //圓點文字下間距 private int textMarginRight = 10; public NumberTextView(Context context) { super(context); initAttributeSet(context, null); } public NumberTextView(Context context, AttributeSet attrs) { super(context, attrs); initAttributeSet(context, attrs); } public NumberTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initAttributeSet(context, attrs); } private void initAttributeSet(Context context, AttributeSet attrs) { if (attrs != null) { TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NumberTextView); text = array.getString(R.styleable.NumberTextView_number); text = TextUtils.isEmpty(text) ? "0" : text; textSize = array.getDimensionPixelSize(R.styleable.NumberTextView_numberTextSize, textSize); textColor = array.getColor(R.styleable.NumberTextView_numberTextColor, textColor); solidColor = array.getColor(R.styleable.NumberTextView_numberSolidColor, solidColor); textMarginTop = array.getDimensionPixelSize(R.styleable.NumberTextView_numberMarginTop, textMarginTop); textMarginRight = array.getDimensionPixelSize(R.styleable.NumberTextView_numberMarginRight, textMarginRight); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (text.equals("0")) { return; } paint = new Paint(); paint.setAntiAlias(true); //圓點背景 paint.setColor(solidColor); int textSpace = 0; if (text.length() > 2) { textSpace = (text.length() - 2) * textSize / 2; } int cx = getMeasuredWidth() - radius - textSpace - textMarginRight; int cy = radius + textMarginTop; paint.setStyle(Paint.Style.FILL); RectF rectF = new RectF(cx - radius - textSpace, cy - radius, cx + radius + textSpace, cy + radius); canvas.drawRoundRect(rectF, radius, radius, paint); //文字 paint = new Paint(); paint.setAntiAlias(true); paint.setColor(textColor); paint.setTextSize(textSize); Rect rect = new Rect(); paint.getTextBounds(text, 0, text.length(), rect); canvas.drawText(text, cx - rect.width() / 2, cy + rect.height() / 2, paint); } /** * 設定文字 * * @param text */ public void setText(String text) { this.text = text; invalidate(); } /** * 設定文字大小 * * @param textSize */ public void setTextSize(int textSize) { this.textSize = textSize; invalidate(); } /** * 設定顏色 * * @param solidColor */ public void setSolidColor(int solidColor) { this.solidColor = solidColor; invalidate(); } /** * 設定圓點半徑 * * @param radius */ public void setRadius(int radius) { this.radius = radius; invalidate(); } }
以上就是直播原始碼網站,訊息圖示在收到訊息時展示訊息條數實現的相關程式碼, 更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2849494/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- app直播原始碼,收到訊息時出現彈窗APP原始碼
- RocketMQ 訊息整合:多型別業務訊息——定時訊息MQ多型型別
- 好訊息 OR 壞訊息
- Giraph原始碼分析(三)—— 訊息通訊原始碼
- 訊息機制篇——初識訊息與訊息佇列佇列
- RocketMQ 訊息整合:多型別業務訊息-普通訊息MQ多型型別
- 訊息佇列——數十萬級訊息的消費方案佇列
- 直播電商原始碼,利用Kotlin+RocketMQ 實現延時訊息原始碼KotlinMQ
- 訊息認證碼
- 利用redis的hash結構搭建訊息服務(發訊息,訂閱訊息,消費訊息,退訂)Redis
- RocketMQ 原理:訊息儲存、高可用、訊息重試、訊息冪等性MQ
- 訊息中介軟體—RocketMQ訊息消費(三)(訊息消費重試)MQ
- MQTT-保留訊息和遺囑訊息MQQT
- 訊息中介軟體—RocketMQ訊息傳送MQ
- RabbitMQ訊息佇列(五):Routing 訊息路由MQ佇列路由
- 解析 RocketMQ 業務訊息——“事務訊息”MQ
- 解析 RocketMQ 業務訊息--“順序訊息”MQ
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- Flash 訊息
- 直播平臺原始碼,各個樣式的訊息通知欄顯示方式原始碼
- (原創) odoo17中在訊息主題(mail.thread)中傳送訊息時,是否通知訊息作者進行控制OdooAIthread
- 實時訊息推送整理
- 全面剖析Android訊息機制原始碼Android原始碼
- Python PyQt顯示臨時狀態訊息PythonQT
- EventBridge訊息路由|高效構建訊息路由能力路由
- RocketMQ定時/延時訊息MQ
- 訊息推送平臺的實時數倉?!flink消費kafka訊息入到hiveKafkaHive
- 用 Laravel 自帶訊息模組搭建小程式實時推送訊息Laravel
- RocketMQ訊息丟失解決方案:事務訊息MQ
- 訊息粘包 和 訊息不完整 問題
- 訊息佇列系列一:訊息佇列應用佇列
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- Laravel 訊息通知原始碼閱讀筆記Laravel原始碼筆記
- Android Handler訊息機制原始碼解讀Android原始碼
- 原始碼分析:Android訊息處理機制原始碼Android
- 訊息推送介面設計(內含原始碼)原始碼
- 【RocketMQ原始碼分析】深入訊息儲存(2)MQ原始碼