【Android】カスタムProgressView-プログレスバーアニメーション

3285 ワード

先日、会社の需要があって、进度条のアニメーションを実现して、もともとネット上で似たようなものがあるかどうかを探して使って、サボってもだめです.Viewプログレスバーアニメーションを簡単にカスタマイズします.実現は簡単だ.
Githubプロジェクトアドレス
アニメーションのプレビュー
  • 社内プロジェクト効果プレビュー
  • を使用
  • 簡潔効果プレビュー
  • コード実装
    アニメーションの効果はとても简単で、ObjectAnimatorの属性のアニメーションを使って実现して、この公式はいくつかApiの使用を提供して、具体的に公式のドキュメントを见ることができます.この例では、後でより複雑なアニメーションを実装する必要がある場合にカスタマイズできます.ここでは、コード注釈について、ベースカスタムViewアニメーションについて簡単に説明します.必要な効果が私と似ている場合は、ProgressViewファイルを直接コピーして使用することができます.必要なプロパティが足りない場合は、直接中で追加を変更することができます.
    コードを見るのが王道だ
  • カスタムView-ProgressViewコード(プライマリコードのみ表示)
  • public class ProgressView extends View {
        
        private void initView() {
            //     
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            animator = new ObjectAnimator();
            //      
            animator.setPropertyName("progress");
            //       View
            animator.setTarget(this);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            //    
            paint.setAntiAlias(true);                  //        
            paint.setColor(color);                    //      
            paint.setStyle(Paint.Style.FILL);
            paint.setStrokeWidth(1);
            //         
            RectF rectF = new RectF(0, 0, progress, getHeight());
            canvas.drawRoundRect(rectF, radius, radius, paint);
        }
    
        public void startAnim() {
            if (animator.isRunning()) animator.end();
            //      ,  0 - max
            animator.setFloatValues(0, progress);
            //      
            animator.setDuration(duration);
            //    
            animator.start();
        }
    
    }
    
  • xml追加コード
  •  "@+id/progressview"
            android:layout_width="wrap_content"
            android:layout_height="30dp"/>
    
  • コード使用コード
  • //    
    progressview.setColor(getResources().getColor(R.color.colorAccent));
    //            
    progressview.setRadius(6);
    //             px
    progressview.setProgress(500);
    //      
    progressview.setDuration(500);
    //    
    progressview.startAnim();
    
    //    
    progressview.getAnimator().addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            //    
        }
    
        @Override
        public void onAnimationEnd(Animator animation) {
           //    
        }
    
        @Override
        public void onAnimationCancel(Animator animation) {
            //    
        }
    
        @Override
        public void onAnimationRepeat(Animator animation) {
            //    
        }
    });
    

    意見のフィードバック
    問題や良いアドバイスがあれば、issue、[email protected]または[email protected]
    あなたに役に立つと思ったら、いいですね.