문장을 유창하게 반짝이다

7506 단어 Android

그림 완성



VISIBLE/INVISIBLE가 아니라 페이드 아웃으로 부드럽게 깜박입니다.
(GIF 애니메이션의 반복으로 인해 깜빡이는 시기는 다소 혼란스럽지만 실제로는 등간격으로 깜빡인다)

이루어지다


AnimatorSample.java(발췌문)
private Handler mHandler = new Handler();
private ScheduledExecutorService mScheduledExecutor;
private TextView mLblMeasuring;

private void startMeasure() {


    /**
     * 点滅させたいView
     * TextViewじゃなくてもよい。
     */
    mLblMeasuring = (TextView) findViewById(R.id.lbl_measuring);

    /**
     * 第一引数: 繰り返し実行したい処理
     * 第二引数: 指定時間後に第一引数の処理を開始
     * 第三引数: 第一引数の処理完了後、指定時間後に再実行
     * 第四引数: 第二、第三引数の単位
     *
     * new Runnable(無名オブジェクト)をすぐに(0秒後に)実行し、完了後1700ミリ秒ごとに繰り返す。
     * (ただしアニメーションの完了からではない。Handler#postが即時実行だから??)
     */
    mScheduledExecutor = Executors.newScheduledThreadPool(2);

    mScheduledExecutor.scheduleWithFixedDelay(new Runnable() {
        @Override
        public void run() {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    mLblMeasuring.setVisibility(View.VISIBLE);

                    // HONEYCOMBより前のAndroid SDKがProperty Animation非対応のため
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                        animateAlpha();
                    }
                }
            });
        }


        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        private void animateAlpha() {

            // 実行するAnimatorのリスト
            List<Animator> animatorList = new ArrayList<Animator>();

            // alpha値を0から1へ1000ミリ秒かけて変化させる。
            ObjectAnimator animeFadeIn = ObjectAnimator.ofFloat(mLblMeasuring, "alpha", 0f, 1f);
            animeFadeIn.setDuration(1000);

            // alpha値を1から0へ600ミリ秒かけて変化させる。
            ObjectAnimator animeFadeOut = ObjectAnimator.ofFloat(mLblMeasuring, "alpha", 1f, 0f);
            animeFadeOut.setDuration(600);

            // 実行対象Animatorリストに追加。
            animatorList.add(animeFadeIn);
            animatorList.add(animeFadeOut);

            final AnimatorSet animatorSet = new AnimatorSet();

            // リストの順番に実行
            animatorSet.playSequentially(animatorList);

            animatorSet.start();
        }
    }, 0, 1700, TimeUnit.MILLISECONDS);

}

좋은 웹페이지 즐겨찾기