パスを使用して星形を表示するカスタム ビューがあります。このビューは期待どおりに機能しますが、実装を新しい Google Material の推奨事項に移行したいと考えています。
残念ながらelevation
、凸状のアウトラインに依存しており、まだ解決策を見つけていません。
既知の回避策やその他の創造的な解決策はありますか?
これは私の凹型パスです:
double outerSize = w / 2;
double innerSize = w / 5;
double delta = 2.0*Math.PI/5.0;
double rotation = Math.toRadians(-90);
double xpos = w/2.0;
double ypos = h/2.0;
mPath = new Path();
mPath.moveTo((float)(outerSize * Math.cos(delta + rotation) + xpos),
(float)(outerSize * Math.sin(delta + rotation) + ypos));
for(int point= 0;point<6;point++)
{
mPath.lineTo((float) (innerSize * Math.cos(delta * (point + 0.5) + rotation) + xpos),
(float) (innerSize * Math.sin(delta * (point + 0.5) + rotation) + ypos));
mPath.lineTo((float) (outerSize * Math.cos(delta * (point + 1.0) + rotation) + xpos),
(float) (outerSize * Math.sin(delta * (point + 1.0) + rotation) + ypos));
}
mPath.close();
私は成功せずにこのコードを試しましたが、これは凸面ビューでうまく機能します。
@TargetApi(21)
private class StarOutline extends ViewOutlineProvider {
@Override
public void getOutline(View view, Outline outline) {
StartView r = (StartView) view;
// i know here say setConvexPath not setConcavePath
outline.setConvexPath(r.mPath);
}
}
しかし、予想どおり、例外が発生しています。
java.lang.IllegalArgumentException: path must be convex
at android.graphics.Outline.setConvexPath(Outline.java:216)
この目的を達成する方法はありますか?