自定義TextView解決事件衝突TextView不能獲取焦點問題
import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.widget.TextView; import com.bluezhang.zhufengfm.BuildConfig; /** * Author: blueZhang * DATE:2015/10/25 * Time: 17:35 * email:[email protected]*/ /** * 自定義TextView的跑馬燈的效果 * 用於解決如果出現事件衝突TextView不能夠獲取焦點 * 如果可以獲取焦點那麼可以使用如下程式碼 * <pre> android:layout_width="100dip" android:layout_height="wrap_content" android:layout_gravity="center" android:text="走馬燈效果的演示" android:singleLine="true" android:ellipsize="marquee"android:focusable="true" android:focusableInTouchMode="true"
<com.bluezhang.zhufengfm.widgets.NewTextView android:id="@+id/playtrackui_textview_titile_id" android:layout_width="160dp" android:layout_height="wrap_content" android:layout_centerVertical="true"android:layout_marginLeft="30dp" android:layout_toRightOf="@id/playtrackui_imageview_back_id" android:ellipsize="marquee" android:singleLine="true" android:text="Title" android:textColor="@color/dimgrey" android:textSize="17sp" />
<pre/>* */
public class NewTextView extends TextView implements Runnable { private int currentScrollX;// 當前滾動的位置 private boolean isStop = false; private int textWidth; private boolean isMeasure = false; public NewTextView(Context context) { super(context); } public NewTextView(Context context, AttributeSet attrs) { super(context, attrs); } public NewTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (!isMeasure) {// 文字寬度只需獲取一次就可以了 getTextWidth(); isMeasure = true; } } /** * 獲取文字寬度 */ private void getTextWidth() { Paint paint = this.getPaint(); String str = this.getText().toString(); textWidth = (int) paint.measureText(str); } @Override public void run() { currentScrollX += 1;// 滾動速度 scrollTo(currentScrollX, 0); if (isStop) { return; } if (getScrollX() >= (this.getWidth() + textWidth)) { scrollTo(-(textWidth + 160), 0); currentScrollX = -textWidth - 160; if (BuildConfig.DEBUG) Log.d("NewTextView", "條件成立"); } postDelayed(this, 5); } // 開始滾動 public void startScroll() { isStop = false; this.removeCallbacks(this); post(this); } // 停止滾動 public void stopScroll() { isStop = true; } // 從頭開始滾動 public void startFor0() { currentScrollX = -textWidth - 160; startScroll(); } }
相關推薦
自定義TextView解決事件衝突TextView不能獲取焦點問題
import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; impor
自定義View解決滑動衝突
最近在讀Android開發藝術探索,本文作為自己對view的滑動衝突的理解和實踐記錄 而滑動衝突,需要了解Android的事件分發機制,如果這個還有些疑惑的地方,請參考這篇文章,以及其中的參考文章 還需要View的Measure和Layout的相關知識Vie
Android 自定義View 解決 TextView 自動換行排版不整齊
第一次寫東西,內心小緊張,又不知道怎麼寫,儘量把遇到的問題和解決思路說清楚,寫的不好請見諒。 需求 專案有一個需求,很簡單,就是一個recyclerview,item裡面是兩個textview。一個TextView顯示的字串包含圓角、半形和中、英文以及數字。 想起來
html 屬性是可以自定義的(解決引數獲取的問題)
js 裡面需要引數去執行一些操作 , 這個引數可以通過input hidden 設定數值 然後通過 jQ獲取,也可以通過在觸發時間的DOM上自定義一個屬性,通過$(this).attr(屬性的名字) 來獲取 ; html <button type="button
自定義可伸縮展開的TextView
最近有個需求,使用者簡介下面的文字可以伸縮擴充套件,預設顯示3行文字,點選圖片展開剩下的內容,ui效果如下: 於是自定義了一個可伸縮擴充套件的TextView ,實現效果截圖如下: 實現程式碼如下:程式碼註釋很詳細 1.Mainivit
自定義shape實現Button和Textview的圓角,描邊,顏色漸變效果
shape特效定製很重要,但不經常用容易忘記,所以記錄在這裡方便以後需要時直接來看筆記,只因為本人不喜歡背程式碼,只喜歡活學活用吧!哈哈 實現效果如下圖中按鈕的樣式,有邊框描邊,有中間背景顏色過渡漸變
自定義拖拽事件時,div可以拖拽,img拖不了的解決方法
原因:未阻止事件流和預設事件 解決方法: function pauseEvent(e){ //已做相容性處理 if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.pre
RecycleView的使用+自定義監聽事件
eight style width add text boolean listen long group 最近使用了RecycleView,發下這個控件十分好用,替代了listView和GridView,包括適配器都很方便。 效果如下: 具體使用如下所示: 1 co
HTML5 自定義點擊事件
[0 touch clientx ini andro tar end str ron /* 封裝的TAP事件 */ (function () { /** * IOS 和 PC 端 只需要創建
Android 自定義組件 事件處理
items int ems set rect 獲取 控件 pan highlight 以點擊事件為例: 覆寫方法: public boolean dispatchTouchEvent(MotionEvent event); 可以從MotionEvent 獲取事件坐標,
vue 組件 子向父親通信用自定義方法用事件監聽
自定義 let 事件監聽 () 有理 mode head con methods <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>Title
JAVA實現延時過期MAP 支持自定義過期觸發事件
keys 算法 public 寫入 hash pty static 實現 ssa 如題,直接上代碼: 1 import java.util.Iterator; 2 import java.util.concurrent.ConcurrentHashMap; 3
事件監聽和window.history以及自定義創建事件
lac 瀏覽器 捕獲 tps details push AD his listener 1.事件監聽window.addEventListener方法: Window.addEventListener(event, function, useCapture); useC
[Vue]組件——通過$emit自定義組件事件
component clas ref pre .org http 組件 span 監聽 1.在定義組件時調用內建的 $emit 方法並傳入事件的名字,來向父級組件觸發一個事件enlarge-text: Vue.component(‘blog-post‘, {
Lucene筆記26-Lucene的使用-自定義QueryParser解決部分查詢的效能問題
一、使用自定義QueryParser的原因 對於某些QueryParser(FuzzyQuery、WildcardQuery)在查詢時會使得效能降低,所以考慮將這些查詢取消。 在具體的查詢時候,很可能有這樣一種需求:獲取的是一個數字查詢範圍,所以必須要擴充套件原有的QueryPa
靈活使用標籤的data自定義屬性和事件物件
如果需要動態的給每一個標籤新增一樣的事件,且只有對應的內容改變,則可以通過data事先定義好要用的資料,然後通過事件物件獲取,data自定義屬性可以是一個字串或者是一個物件 形如: data-address=“中華人民共和國” data-sta
移動端app,mui頁面互動之自定義偵聽事件
b.html程式碼 //引數1:處罰這個事件的頁面物件 //引數2:自定義事件名稱,自取 //引數3:傳值 Object 物件的形式 var homePage = plus.webview.currentWebview().opener();//獲取a頁面物件 var a = 1; mui.fi
Lucene筆記27-Lucene的使用-自定義QueryParser解決日期和數字範圍問題
一、需求說明 Lucene提供的getRangeQuery(String field, String part1, String part2, boolean inclusive)方法支援的是String,假設我們需要對數字範圍查詢,那麼就需要我們自己來改寫了。 二、程式碼實現 重寫
VUE/使用echarts格式化浮窗自定義按鈕及事件
注意看這一段程式碼 mounted() { let that=this; window.detal = function () { &n
架構篇--系統監控--spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,系統異常郵件通知
架構篇–系統監控–spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,加工原生端點,系統異常郵件通知,ui介面spring-boot-admin2.0整合等等內容