直播原始碼網站,訊息圖示在收到訊息時展示訊息條數
直播原始碼網站,訊息圖示在收到訊息時展示訊息條數實現的相關程式碼
使用
<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多型型別
- RocketMQ 訊息整合:多型別業務訊息-普通訊息MQ多型型別
- Giraph原始碼分析(三)—— 訊息通訊原始碼
- 訊息機制篇——初識訊息與訊息佇列佇列
- 解析 RocketMQ 業務訊息——“事務訊息”MQ
- 解析 RocketMQ 業務訊息--“順序訊息”MQ
- 自定義訊息獲取訊息(轉)
- 訊息佇列——數十萬級訊息的消費方案佇列
- 利用redis的hash結構搭建訊息服務(發訊息,訂閱訊息,消費訊息,退訂)Redis
- RocketMQ 原理:訊息儲存、高可用、訊息重試、訊息冪等性MQ
- 訊息中介軟體—RocketMQ訊息消費(三)(訊息消費重試)MQ
- 訊息中介軟體—RocketMQ訊息傳送MQ
- MQTT-保留訊息和遺囑訊息MQQT
- 自定義訊息和對訊息的理解
- 訊息認證碼
- 直播電商原始碼,利用Kotlin+RocketMQ 實現延時訊息原始碼KotlinMQ
- SQLSTATE 訊息SQL
- Windows訊息Windows
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- RabbitMQ訊息佇列(五):Routing 訊息路由MQ佇列路由
- OC訊息機制,訊息轉發機制
- Android訊息機制Message訊息池Android
- 深入解析MFC訊息響應和訊息路由路由
- 用 Laravel 自帶訊息模組搭建小程式實時推送訊息Laravel
- RocketMQ定時/延時訊息MQ
- Android訊息機制原始碼分析Android原始碼
- 直播平臺原始碼,各個樣式的訊息通知欄顯示方式原始碼
- (原創) odoo17中在訊息主題(mail.thread)中傳送訊息時,是否通知訊息作者進行控制OdooAIthread
- 訊息佇列系列一:訊息佇列應用佇列
- Rabbitmq可靠訊息投遞,訊息確認機制MQ
- 訊息粘包 和 訊息不完整 問題
- RocketMQ訊息丟失解決方案:事務訊息MQ
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- Android訊息傳遞之Handler訊息機制Android
- 訊息推送平臺的實時數倉?!flink消費kafka訊息入到hiveKafkaHive
- 編寫程式閱讀一條訊息,然後逆序列印出該訊息
- RabbitMQ訊息模式MQ模式