最近、自分で結果を達成することである網易クラウドクラウド効果、などのカスタムビュークジラを実装しています。
ディレクトリ
これは、2つの領域に分割されています。
- 回転せん断
- 水の波紋の拡散
1.回転とせん断
主に使用した画像のカット、ImageViewののsetOutlineProvider
この方法を、
roundImage.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
int width = roundImage.getWidth();
int height = roundImage.getHeight();
outline.setOval(0, 0, width, height);
}
});
roundImage.setClipToOutline(true);
复制代码
そして、プロパティアニメーションによって回転
//属性动画让roundImage旋转起来
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(roundImage, "rotation", 0, 360);
objectAnimator.setDuration(15000);
objectAnimator.setRepeatMode(ValueAnimator.RESTART);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.setRepeatCount(-1);
objectAnimator.start();
复制代码
ObjectAnimatorはこの記事を参照することができますについて
2.水波の拡散
主にDiffuseView徐々に下のクラスに○をつけ、その後、遅延を更新します。
-
まず必要
mMaxRadiusWidth
とmMinRadiusWidth
する円の最小および最大半径を得るために、これら2つのパラメータ、mMaxRadiusWidth
することができるonMeasure
で取得高で幅広いonMeasureを取得します
mMaxRadiusWidth = Math.min(getMeasuredHeight() / 2, getMeasuredWidth() / 2); 复制代码
PS:使用していることに注意してください
getWidth
とgetHeight
方法が問題になることが -
次いで、これら2つのパラメータの円の半径を表す、対応する透明度
private List<Integer> mAlphas = new ArrayList<>(); private List<Integer> mWidths = new ArrayList<>(); 复制代码
-
あなたは、必要があるかもしれません:ピクセルDPに変換する方法
float twelveDp = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 12, mContext.getResources().getDisplayMetrics() ); 复制代码
-
その後に
onDraw
円、各更新塗装mAlphas
及びmWidths
必要ラウンド付加および欠失の増殖に対処するためながら、値をfor (int i = 0; i < mAlphas.size(); i++) { Integer alpha = mAlphas.get(i); mPaint.setAlpha(alpha); Integer width = mWidths.get(i); canvas.drawCircle(getWidth() / 2, getHeight() / 2, width, mPaint); if (alpha >= 2 && width <= mMaxRadiusWidth) { mAlphas.set(i, alpha - 2); mWidths.set(i, width + 1); } else if (width <= mMinRadiusWidth) { mWidths.set(i, width + 1); } } 复制代码
-
そして、遅延をリフレッシュ
if (mIsDiffuse) { postInvalidateDelayed(30); } 复制代码
-
注意:オンとオフの円アニメーションの広がりを制御するためにmIsDiffuseパラメータを設定することにより
における活動のようなオープンなアニメーション:
diffuseView.start(); 复制代码
これは、あなたが質問や提案がある場合は、問題を通じて質問してくださいスターを歓迎している間、私は時折githubの上で更新し、独自のカスタムビューを作成しますが、私のgithubのアドレスであります
この資料では、への参照をしました:
ます。https://juejin.im/post/5d033e46e51d4550723b13e6で再現