1. 程式人生 > >Android運用自定義控制元件實現閃爍字

Android運用自定義控制元件實現閃爍字

專案中要用到閃爍字來標識一些重要的提醒以及醒目的文字等,這裡Android並沒有為我們提供一些元件,這裡可以使用自定義的TextView,運用paint設定漸變渲染器LinearGradient來實現。

先看一下實現的效果,由於寫的倉促就沒有做動圖了。。。就是一個藍色的漸變:

先來看一下漸變渲染器的LinearGradient的API

構造方法


可以看到,需要傳遞的引數分別是沿著一條直線的梯度變化座標點和梯度漸變的顏色陣列。這裡我們就可以為我們的paint設定LinearGradient來繪製這個控制元件。

實現程式碼:

如果控制元件要支援wrap_content的控制元件大小的時候,自定義控制元件的時候必須重寫onMeasure()方法,去給出指定的大小。

<span style="font-size:18px;">public class SharderTextView extends TextView {
    //控制元件的寬
    int mViewWidth;
    //平移量
    int mTransLate;
    private TextPaint paint;
    private LinearGradient mlinearGradient;
    private Matrix matrix;

    public SharderTextView(Context context) {
        super(context);
    }

    public SharderTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SharderTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(measureWidth(widthMeasureSpec),measureHigth(heightMeasureSpec));
    }

    /**
     * 測量寬的方法
     * @param measureSpec
     * @return
     */
    private int measureWidth(int measureSpec){
        int result = 0;
        int measureMode = MeasureSpec.getMode(measureSpec);
        int size = MeasureSpec.getSize(measureSpec);
        if(measureMode == MeasureSpec.EXACTLY)
        {
            result = size;
        }else{
            result = 200;
            //當控制元件為warp_content時
            if(measureMode ==MeasureSpec.AT_MOST)
            {
                result = Math.min(result,size);
            }
        }
        return result;
    }

    /**
     * 測量控制元件高度的方法
     * @param measureSpec
     * @return
     */
    private int measureHigth(int measureSpec)
    {
        int result = 0;
        int measureMode = MeasureSpec.getMode(measureSpec);
        int size = MeasureSpec.getSize(measureSpec);
        if(measureMode == MeasureSpec.EXACTLY)
        {
            result = size;
        }else{
            result = 200;
            if(measureMode == MeasureSpec.AT_MOST)
            {
                result = Math.min(result,size);
            }
        }
        return result;
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if(mViewWidth ==0)
        {
            mViewWidth = getMeasuredWidth();
        }
        if(mViewWidth>0)
        {
            //獲取繪製當前TextView的paint物件
            paint = getPaint();
            //建立渲染漸變器
            mlinearGradient = new LinearGradient(0,0,mViewWidth,0,new int[]{Color.BLUE,0xffffffff,Color.BLUE},null, Shader.TileMode.CLAMP);
            paint.setShader(mlinearGradient);
            matrix = new Matrix();
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(matrix!=null)
        {
            mTransLate+=mViewWidth/5;
            if(mTransLate>2*mViewWidth)
            {
                mTransLate = -mViewWidth;
            }
            matrix.setTranslate(mTransLate,0);
            mlinearGradient.setLocalMatrix(matrix);
            postInvalidateDelayed(100);
        }
    }
}
</span>
基本就是這樣的一個簡單的實現,水平有限,歡迎批評指教

相關推薦

Android運用定義控制元件實現閃爍

專案中要用到閃爍字來標識一些重要的提醒以及醒目的文字等,這裡Android並沒有為我們提供一些元件,這裡可以使用自定義的TextView,運用paint設定漸變渲染器LinearGradient來實現。 先看一下實現的效果,由於寫的倉促就沒有做動圖了。。。就是一個藍色的漸變

Android定義控制元件實現可滑動的開關(switch)

介紹 昨天晚上寫了一個Android的滑動開關, 即SlideSwitch。效果如下: 實現 實現的思路其實很簡單,監聽控制元件上的touch事件,並不斷重新整理,讓滑塊在手指的位置上繪出,達到滑塊跟著手指滑動的顯示效果。 先看一下程式碼

Android定義控制元件實現帶百分比顯示進度條,可定義顏色

介紹 前天做了一個帶百分比顯示的條形進度條,效果如下: 實現 這個自定義進度條, 看起來簡單, 做起來。。。其實也很簡單: 主要通過繼承View類, 並重寫其onDraw方法實現。 思路分為3步: 1. 畫進圖條背景(圖中灰色部分 2. 根據

Android右滑關閉Activity介面功能-定義控制元件實現

引言Android右滑關閉Activity介面功能,網上已經有好多優秀的開原始碼和專案,不過大部分都是結合ViewDragHelper來實現的,這裡要討論的是通過結合ValueAnimator來實現,目前我的控制元件只實現了從左往右(上往下)滑關閉介面。需求在介面上從左往右滑

[Android例項] 定義控制元件一百行程式碼實現微信朋友圈九宮格圖片顯示

package com.weixinninegridlayout;import android.content.Context;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android

Android實戰簡易教程-第六十九槍(定義控制元件實現雪花飄落效果)

現在APP要求越來越高了,不只是要求實現功能,顏值的要求也越來越高,下面我們通過自定義控制元件來實現雪花飄落的效果,可以作為介面背景哦。1.自定義控制元件:package com.test.a; import java.util.Random; import androi

Android定義控制元件實現圓形進度CircleProgressBar

近日有朋友問我有沒有如下圖效果的開源控制元件 , 相信大家無論是用IOS還是Android,都對這種效果不陌生,很多主流APP都會有這樣或類似的效果,之前也打算研究一下這類控制元件的程式碼,苦於一直不知道應該怎麼搜尋這種效果(就是關鍵詞)或者所搜的結

Android完全定義控制元件並且實現監聽事件

本篇文章帶來Android的完全自定義控制元件。載體是自定義一個開關的控制元件,並且能夠響應事件,首先我們先創一個專案,名字就叫ToggleView,修改MainActivity public class MainActivity extends Acti

Android 通過定義控制元件方式實現帶開關效果的左右切換選擇器。

通過自定義控制元件方式實現帶開關效果的左右切換選擇器。 1、先上效果圖 2、佈局檔案gender_select_button.xml 佈局檔案很簡單,左右各一個RelativeLayout,佈局裡再巢狀一個TextView,用來顯

定義控制元件 實現 抽獎轉盤功能

先來看看佈局頁面 so easy 簡簡單單的佈局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.

定義控制元件--實現步驟

前言:       在android開發中我們常常會用到自定義控制元件,可是為什麼要自定義呢?自定義控制元件又該怎麼實現呢?下面我們來了解下自定義控制元件的常用知識。 1:為什麼要自定義控制元件   &nb

Android定義控制元件 --- 定義屬性 列舉值(固定屬性值)

今天寫一個自定義控制元件,為了提高使用者使用效率,需要對一個屬性的所有可能屬性值進行列舉(即,只能選擇使用給出的屬性值) 查了很多資料,自己總結一下。 如何寫自定義控制元件就不在贅述了,網上很多大神寫的都很好,此處只說明這一種情況。 attrs.xml <?xml

Android開發自定義控制元件實現一個圓形進度條【帶數值和動畫】

實現一個如下圖所示的自定義控制元件,可以直觀地展示某個球隊在某個賽季的積分數和勝場、負場、平局數 首先對畫布進行區域劃分,整個控制元件分上下兩部分 上邊是個大的圓環,圓環中間兩行文字,沒什麼難度,選好圓心座標和半徑後直接繪製即可,繪製文字也是如此。 下部分是三個小的圓弧進

定義控制元件實現階梯佈局

public class JieTiViewGroup extends ViewGroup { public JieTiViewGroup(Context context) { this(context,null); } public JieTiVi

Android定義控制元件SegmentedGroup

GitHub:https://github.com/Kaopiz/android-segmented-control 一 、新增依賴 implementation 'info.hoang8f:android-segmented:1.0.6' 二、佈局中使用 <info.hoan

【qq_20330595的部落格】android-service_定義控制元件_koltin

Android小碼家 微信小程式:原始碼,書籍,站點,實用工具,應有盡有,微信簡歷實時預覽與分享。使用者可自由上傳自己的資源和簡歷,歡迎大家前來,添磚加瓦,共同進步。 現已關聯微信公眾號:每天都有乾貨定時推送,獵奇學習兩不誤。

C#定義控制元件-消除閃爍

開始學習製作自定義控制元件的時候,自定義控制元件在重繪時總是發生閃爍。這是因為直接向螢幕繪圖導致的。自己繪製控制元件的外觀首先要過載OnPaint事件處理函式,該函式的一個簡單示例如下: protectedoverridevoid OnPaint(PaintEventArgs pe)    {     

Android開發自定義控制元件實現一個折線圖

實現一個如下圖所示的折線圖 首先是控制元件繪圖區域的劃分,控制元件左邊取一小部分(控制元件總寬度的八分之一)繪製表頭,右邊剩餘的部分繪製表格 確定表格的行列數,首先繪製一個三行八列的網格,設定好行列的座標後開始繪製 /*繪製三條橫線*/ for(int i=0;i&l

Android定義控制元件

作為一個有創意的開發者,或者軟體對UI設計的要求比較高,你經常會遇到安卓自帶的控制元件無法滿足你的需求的情況,這種時候,我們只能去自己去實現適合專案的控制元件。同時,安卓也允許你去繼承已經存在的控制元件或者實現你自己的控制元件以便優化介面和創造更加豐富的使用者體驗。 那麼

安卓定義控制元件-實現IOS版UC瀏覽器三點載入動畫效果

1.實現分析 廢話不多說,看下IOS版UC瀏覽器的載入效果 簡單畫個圖看下整個過程 1.B圓的圓心移動的座標為:A圓和B圓的圓心的距離L的中點為圓心O1的下半圓的運動軌跡經過的座標,就有一個由B位置到A位置圓周運動的軌跡。 2.C圓的圓心