Paint---PathEffect(パス効果)


API-PathEffect|Android開発者PathEffect見文知意は明らかに経路効果の意味です.私たちは一般的に彼の6つのサブクラスを使用しています.
  • ComposePathEffect
  • 構築方法:ComponentPathEffect(PathEffect outerpe,PathEffect innerpe)
  • の組み合わせ効果は、まずinnerpeを現れ、次にinnerpeに基づいてouterpe効果、すなわちouterpe(innerpe(Path);

  • CornerPathEffect
  • 構築方法:CornerPathEffect(float radius)
  • CornerPathEffectの構造方法は、角の滑らかさ
  • を意味する1つのパラメータradiusのみを受け入れる.
  • DashPathEffect
  • 構築方法:DashPathEffect(float[]intervals,float phase)
  • intervalsは、要素の個数が2以上である浮動小数点型配列である.
  • 例えばfloat[]{20,10}の偶数パラメータ20(配列の下付きは0から始まることに注意してください)は私たちの最初の実線の長さを定義し、奇数パラメータ10は最初の破線の長さを表し、このとき配列の後ろにデータがなければ最初の数を繰り返してループします.例えば、私たちは20,10後に数がありません.では線全体が[20,10,20,10,20,10,20,10..................]という状態になります
  • phaseはオフセット値であり、その値を動的に変更するとパスにアニメーションの効果が生じる
  • .
  • DiscretePathEffect
  • DiscretePathEffect離散経路効果は相対的にやや複雑な点であり、経路に多くの「雑点」の突起を描き、上図の3本目の線のような錆びた針金のような効果をシミュレートする.その構造方法には2つのパラメータがあり、1つ目はこれらの突出した「雑点」の密度を指定し、値が小さいほど雑点が密集し、2番目のパラメータは「雑点」の突出の大きさで、値が大きいほど突出の距離が大きくなり、逆に
  • になります.
  • PathDashPathEffect
  • 構築方法:PathDashPathEffect(Path shape,float advance,float phase,Style style)
  • PathDashPathEffectとDashPathEffectは似ていますが、PathDashPathEffectはパス破線のスタイル
  • を自分で定義することができます.
  • shapeは、各グラフィック間の間隔をadvanceとし、phaseはオフセット値であり、その値を動的に変更すると、パスにアニメーションの効果が生じる
  • を指す.
  • styleはこのクラスの自由な列挙値であり、ROTATE、MORPH、TRANSLATEの3つのケースがある.
  • ROTATE:線分接続部の図形変換は、次の移動方向と一致する角度に回転する接続
  • を行う.
  • MORPH:図形は引張りや圧縮などの変形が発生した場合に次のセグメントに接続する
  • .
  • TRANSLATE:図は次のセグメントに位置平行移動で接続されます

  • SumPathEffect
  • 構築方法:SumPathEffect(PathEffect first,PathEffect second)
  • 重ね合わせ効果は、ComposePathEffectとは異なり、2つのパラメータの効果を独立して表現し、2つの効果を簡単に重ねて表示します!


  • コードの時間:
    public class MyPathEffectView extends View {
        private float mPhase;//    
        private Paint mPaint;//     
        private Path mPath;//     
        private PathEffect[] mEffects;//       
    
        public MyPathEffectView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            /* *            */
            mPaint = new Paint();
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(5);
            mPaint.setColor(Color.DKGRAY);
    
            //      
            mPath = new Path();
    
            //        
            mPath.moveTo(0, 0);
    
            //         
            for (int i = 0; i <= 30; i++) {
                mPath.lineTo(i * 35, (float) (Math.random() * 100));
            }
    
            //         
            mEffects = new PathEffect[7];
        }
    
        @SuppressLint("DrawAllocation")
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            /* *         */
            mEffects[0] = null;
            //  radius,         
            mEffects[1] = new CornerPathEffect(50);
            //               
            //            “  ”   ,        
            //       “  ”     ,              
            mEffects[2] = new DiscretePathEffect(3.0F, 5.0F);
            //   20,   10,   5,   10,    
            //mPhase    ,    ,        
            mEffects[3] = new DashPathEffect(new float[] { 20, 10, 5, 10 }, mPhase);
            Log.d("pepe", mPhase+"");
            Path path = new Path();
            path.addRect(0, 0, 8, 8, Path.Direction.CCW);
            //path          
            //12      
            //mPhase    ,    ,        
            //style:MORPH,ROTATE,TRANSLATE
            mEffects[4] = new PathDashPathEffect(path, 12, mPhase,
                    PathDashPathEffect.Style.ROTATE);
            //    ,        
            mEffects[5] = new ComposePathEffect(mEffects[2], mEffects[4]);
            //          
            mEffects[6] = new SumPathEffect(mEffects[4], mEffects[3]);
    
            /* *      */
            for (int i = 0; i < mEffects.length; i++) {
                mPaint.setPathEffect(mEffects[i]);
                canvas.drawPath(mPath, mPaint);
    
                //             250   
                canvas.translate(0, 200);
            }
    
            //                 
            mPhase += 1;
            invalidate();
        }
    }

    ソースのダウンロード
    引用:8.3.12 Paint APIの——PathEffect(パス効果)|菜鳥教程カスタムコントロールは実は簡単な1/4-AigeStudio-ブログチャンネル-CSDN.NET詳細PaintのsetPathEffect(PathEffect effect)-developer_Kale-ブログ園