跳躍的文本

大概搜了一下關于文本跳躍的文章服协,思想大抵都是來自https://github.com/frakbot/JumpingBeans這兒

大概讀了一下源碼寞宫,沒看太懂捞挥,大致思想應該是將需要做跳躍的字符串拆成單個文本敏沉,然后對單個文本做動畫初厚。

動畫用到了它自己定義的差值器

 /**
     * A tweaked {@link android.view.animation.AccelerateDecelerateInterpolator}
     * that covers the full range in a fraction of its input range, and holds on
     * the final value on the rest of the input range. By default, this fraction
     * is 65% of the full range.
     *
     * @see JumpingBeans.Builder#DEFAULT_ANIMATION_DUTY_CYCLE
     */
    private static class JumpInterpolator implements TimeInterpolator {

        private final float animRange;

        public JumpInterpolator(float animatedRange) {
            animRange = Math.abs(animatedRange);
        }

        @Override
        public float getInterpolation(float input) {
            // We want to map the [0, PI] sine range onto [0, animRange]
            if (input > animRange) {
                return 0f;
            }
            double radians = (input / animRange) * Math.PI;
            return (float) Math.sin(radians);
        }

    }

然后每個文本啟動動畫的時間延遲不一樣

private void initIfNecessary(float ascent) {
        if (jumpAnimator != null) {
            return;
        }

        this.shift = 0;
        int maxShift = (int) ascent / 2;
        jumpAnimator = ValueAnimator.ofInt(0, maxShift);
        jumpAnimator
                .setDuration(loopDuration)
                .setStartDelay(delay);
        jumpAnimator.setInterpolator(new JumpInterpolator(animatedRange));
        jumpAnimator.setRepeatCount(ValueAnimator.INFINITE);
        jumpAnimator.setRepeatMode(ValueAnimator.RESTART);
        jumpAnimator.addUpdateListener(this);
        jumpAnimator.start();
    }

這個setStartDelay(delay)中的delay是由單個文本在字符串中的位置影響的。

在JumpingBeansSpan這個類中郑叠,最關鍵的代碼應該是

@Override
    public void updateMeasureState(TextPaint tp) {
        initIfNecessary(tp.ascent());
        tp.baselineShift = shift;
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        initIfNecessary(tp.ascent());
        tp.baselineShift = shift;
    }

動畫正是從這兒啟動的夜赵,但是沒有找到這兩個方法調用時機,只是debug的時候可以debug到乡革。

拆分文本的方法是在JumpingBeans這個類中

   private JumpingBeansSpan[] buildWavingSpans(SpannableStringBuilder sbb) {
            JumpingBeansSpan[] spans;
            if (waveCharDelay == DEFAULT_WAVE_CHAR_DELAY) {
                waveCharDelay = loopDuration / (3 * (endPos - startPos));
            }

            spans = new JumpingBeansSpan[endPos - startPos];
            for (int pos = startPos; pos < endPos; pos++) {
                JumpingBeansSpan jumpingBean =
                        new JumpingBeansSpan(textView, loopDuration, pos - startPos, waveCharDelay, animRange);
                sbb.setSpan(jumpingBean, pos, pos + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                spans[pos - startPos] = jumpingBean;
            }
            return spans;
        }
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寇僧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沸版,更是在濱河造成了極大的恐慌婉宰,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件推穷,死亡現(xiàn)場離奇詭異,居然都是意外死亡类咧,警方通過查閱死者的電腦和手機馒铃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痕惋,“玉大人区宇,你說我怎么就攤上這事≈荡粒” “怎么了议谷?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長堕虹。 經(jīng)常有香客問我卧晓,道長,這世上最難降的妖魔是什么赴捞? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任逼裆,我火速辦了婚禮,結果婚禮上赦政,老公的妹妹穿的比我還像新娘胜宇。我一直安慰自己,他們只是感情好恢着,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布桐愉。 她就那樣靜靜地躺著,像睡著了一般掰派。 火紅的嫁衣襯著肌膚如雪从诲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天碗淌,我揣著相機與錄音盏求,去河邊找鬼抖锥。 笑死,一個胖子當著我的面吹牛碎罚,可吹牛的內(nèi)容都是我干的磅废。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荆烈,長吁一口氣:“原來是場噩夢啊……” “哼拯勉!你這毒婦竟也來了?” 一聲冷哼從身側響起憔购,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宫峦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玫鸟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导绷,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年屎飘,在試婚紗的時候發(fā)現(xiàn)自己被綠了妥曲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡钦购,死狀恐怖檐盟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情押桃,我是刑警寧澤葵萎,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站唱凯,受9級特大地震影響羡忘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜波丰,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一壳坪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掰烟,春花似錦爽蝴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至先馆,卻和暖如春发框,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煤墙。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工梅惯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宪拥,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓铣减,卻偏偏與公主長得像她君,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子葫哗,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容