以前のリビジョンの文書です
使うシーンがあるか微妙ですが。。
ベジェ曲線とは↓
・中学生でもわかるベジェ曲線
http://blog.sigbus.info/2011/10/bezier.html
ベジェ曲線を簡単に描ける関数がAndroidAPIで用意されています。
前者が2次ベジェ, 後者が3次ベジェです。制御点の数が違います。
Path # quadTo (float x1, float y1, float x2, float y2)
Path # cubicTo (float x1, float y1, float x2, float y2, float x3, float y3)
cubicToで一角だけ描画
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStrokeWidth(2f);
paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
Path path = new Path();
// スタート地点を移動
path.moveTo(250, 0);
// 制御点1 X, 制御点1 Y, 制御点2 X, 制御点2Y, 終点X, 終点Y
path.cubicTo(450, 0, 500, 50, 500, 250);
canvas.drawPath(path, paint);
}
矩形を描画してクリッピング
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Path path = new Path();
// スタート地点を移動
path.moveTo(250, 0);
// 制御点1 X, 制御点1 Y, 制御点2 X, 制御点2Y, 終点X, 終点Y
path.cubicTo(450, 0, 500, 50, 500, 250);
path.cubicTo(500, 450, 450, 500, 250, 500);
path.cubicTo(50, 500, 0, 450, 0, 250);
path.cubicTo(0, 50, 50, 0, 250, 0);
canvas.clipPath(path);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.eventnews1082);
canvas.drawBitmap(bitmap, 0, 0, null);
}
Canvas # clipPath()を実行する際はPathで完全に囲われている場所がないとクリッピングに失敗するので注意
ちなみに分かりにくいですがクリッピングされた箇所はアンチエイリアスが効いてません。
drawBitmapの第4引数にPaintを渡してもダメでした。
アンチエイリアスをオンにする場合はXfermodeとかで色々しないとダメ?
http://developer.android.com/reference/android/graphics/Xfermode.html