1. 程式人生 > >自定義TextView解決事件衝突TextView不能獲取焦點問題

自定義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整合等等內容