3

Android APIを使用してこのWatchFaceを実現しようとしています:

希望のウォッチフェイスのスクリーンショット

これらは、時間、分、秒に使用される私の塗料です。

secondsPaint.setAntiAlias(true);
secondsPaint.setColor(Color.RED);
secondsPaint.setStyle(Paint.Style.STROKE);
secondsPaint.setStrokeJoin(Paint.Join.ROUND);
secondsPaint.setStrokeWidth(3f);
secondsPaint.setAntiAlias(true);
minutesPaint.setColor(Color.WHITE);
minutesPaint.setStyle(Paint.Style.STROKE);
minutesPaint.setStrokeJoin(Paint.Join.ROUND);
minutesPaint.setStrokeWidth(4f);
hoursPaint.setAntiAlias(true);
hoursPaint.setColor(Color.WHITE);
hoursPaint.setStyle(Paint.Style.STROKE);
hoursPaint.setStrokeJoin(Paint.Join.ROUND);
hoursPaint.setStrokeWidth(5f);

背景、秒、分、時間を描画するために次のコードを実装しました。

// Background
canvas.drawBitmap(background, 0, 0, null);

それから私は時間と分を描きます

// Draw the minute and hour hands.
float minX = (float) Math.sin(minRot) * minLength;
float minY = (float) -Math.cos(minRot) * minLength;
canvas.drawLine(centerX, centerY, centerX + minX, centerY + minY, minutesPai
float hrX = (float) Math.sin(hrRot) * hrLength;
float hrY = (float) -Math.cos(hrRot) * hrLength;
canvas.drawLine(centerX, centerY, centerX + hrX, centerY + hrY, hoursPaint);

そして最後に秒

// draw seconds
float secX = (float) Math.sin(secRot) * secLength;
float secY = (float) -Math.cos(secRot) * secLength;
canvas.drawLine(centerX, centerY, centerX + secX, centerY + secY, secondsPaint);

する必要がある:

  • 画面の真ん中に円を描き、表示されている写真のように中心から数ピクセルずつ時分秒を動かします。
  • アンチエイリアシングが設定されているため、秒と分をより「スムーズ」にしますが、期待どおりに機能しません

現時点での結果は次のとおりです。

実際のウォッチフェイス

4

1 に答える 1

2

円を描くのは を使うのと同じくらい簡単drawCircle()です。
したがって、汚いトリックは、分針と秒針の部分を覆うために、同じ背景色の白いものと別の大きなもの (そしておそらく小さなもの) を描くことです。

したがって、これらの円は手のに描かれているため、隠したい部分を覆います.

非常に安価なトリックです (他の三角法は関係ありません)。
確かに動作します。

レイヤーリストのドローアブルを使用して中央にオーバーレイすることもできます... ;)

しかし、drawCircle()は非常に簡単だと思います。

于 2015-06-10T12:02:10.123 に答える