円形の表面ビュー(ポートホール効果)を作成したいと思います。サーフェスビューはフレームレイアウト内にあります。サーフェイスビューの上にフレームレイアウトを追加し、フレームレイアウト全体をマスクしてポートホールエフェクトを作成し、サーフェスビューをサークルとして表示するカスタムビューを作成したいと思います。親をマスクし、親の中心に透明円を描くカスタムビュー
私は検索し、WebとStackoverflowで多くの回答が失敗しました。 それから、私はthis質問を見ました。このカスタムビューをフレームレイアウト(したがってsurfaceview)にマスクしようとしましたが、望みの結果が得られません。
私が望むのは、親の高さと幅(親は正方形です)をとり、境界の真ん中で4辺すべてに触れる中央で透明な円を作ります(ビュー - サークル)は、私が設定できる色で表示されます。
public class FocusView extends View {
private Paint mTransparentPaint;
private Paint mSemiBlackPaint;
private Path mPath = new Path();
public static float radius , xCor , yCor;
public FocusView(Context context) {
super(context);
initPaints();
}
public FocusView(Context context, AttributeSet attrs) {
super(context, attrs);
initPaints();
}
public FocusView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaints();
}
private void initPaints() {
mTransparentPaint = new Paint();
mTransparentPaint.setColor(Color.GREEN);
mTransparentPaint.setStrokeWidth(10);
mSemiBlackPaint = new Paint();
mSemiBlackPaint.setColor(Color.TRANSPARENT);
mSemiBlackPaint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPath.reset();
mPath.addCircle(xCor,yCor,radius, Path.Direction.CW);
mPath.setFillType(Path.FillType.INVERSE_EVEN_ODD);
canvas.drawCircle(xCor,yCor,radius, mTransparentPaint);
canvas.drawPath(mPath, mSemiBlackPaint);
canvas.clipPath(mPath);
canvas.drawColor(Color.parseColor("#FFFFFF")); //A6000000
}
}
誰かが私を助けることができたらどうかしてください。前もって感謝します。
これはあなたに役立つでしょうか?すべてがxmlではありません。https://stackoverflow.com/questions/46972667/how-to-create-a-complete-round-linearlayout-or-relativelayout/46972897#46972897 – Xenolion