Androidでパスを使用してハート型キャンバスを描画しようとしています。コードは以下の通りである:Android - 色で部分的に塗りつぶす
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// Fill the canvas with background color
canvas.drawColor(Color.WHITE);
// paint.setShader(null);
// Defining of the heart path starts
path.moveTo(left + WIDTH/2, top + HEIGHT/4); // Starting point
// Create a cubic Bezier cubic left path
path.cubicTo(left+WIDTH/5,top,
left+WIDTH/4,top+4*HEIGHT/5,
left+WIDTH/2, top+HEIGHT);
// This is right Bezier cubic path
path.cubicTo(left + 3 * WIDTH/4, top + 4 * HEIGHT/5,
left + 4 * WIDTH/5, top,
left + WIDTH/2, top + HEIGHT/4);
paint.setShader(new LinearGradient(0, canvas.getHeight()/4, canvas.getWidth(), canvas.getHeight()/4, new int[]{Color.RED, Color.YELLOW, Color.GREEN}, new float[]{0, 0.6f, 1}, Shader.TileMode.CLAMP));
canvas.drawPath(path, paint);
heart_outline_paint.setColor(getResources().getColor(R.color.heart_outline_color)); // Change the boundary color
heart_outline_paint.setStrokeWidth(4);
heart_outline_paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(path, heart_outline_paint);
}
私は問題なく心を描画することが可能だと私はペイントでFill
オプションを使用して、心の中の色を埋めることができています。しかし、私はいくつかのデータに基づいて心臓を動的に満たすことができなければならず、常に完全に満たされることはできません。次のように私はこれまでに達成したことはある:私は大規模な調査を行い、これと同様のことがたくさん出くわしてきた
。そのうちのいくつかが含まれています:
は私も内部の色を埋めるために、ユーザーをすることができますFlood Fill Algorithmを使用してビットマップ内の色をビットマップにキャンバスを変換し、充填の概念に出くわしましたビットマップ。しかし、私は心の中に触れている間にビットマップが色を塗りつぶすのではなく、ボタンをクリックしている間に塗りつぶすようにしたい。
私はfilling a circle gradually from bottom to top android が助けてくれると思っていましたが、それは円を利用しており、私はこのような形に円のコードを適応させるのに非常に弱いキャンバスに精通していません。
誰かがこれを達成するためのアイデアや洞察を持っている人は、本当に役に立ちます。乾杯。前もって感謝します。
P.S:また、ペイントでsetShader
を使用していくつかのトリックを試してみましたが、何も私に欲しいものはありません。
EDIT:その半分が満たされたように見えますように、私はちょうどキャンバスの背景と同じ色で、別の心の上に四角形を描画するという考えにつまずい
!!私はまだアイデアに取り組んでおり、これがどれほど正確であるかはわかりません。誰かがより良い考えを持っているなら、あなたは大歓迎です。
「しかし、私はいくつかのデータに基づいて心臓を動的に満たすことができなければならず、常に完全に満たすことはできません。 – pskink
心臓のように、ユーザーが獲得したポイントに応じて10%または20%を充填する必要があります。 – San