黒と青の2つの画像があり、青色の画像をタッチすると進行のように塗りつぶされます.100プッシュアップアプリケーションのように、キャンバスを使用せずsmoothness
にタッチしない複数のカット画像を使用して実現しました.
実際、私は上記のように 100 Pushups アプリケーションのようなものを達成しようとしています.1つの リンクを取得しましたが、それはキャンバスを使用して達成され、画像を使用して達成したい. 100回の腕立て伏せ)?
黒と青の2つの画像があり、青色の画像をタッチすると進行のように塗りつぶされます.100プッシュアップアプリケーションのように、キャンバスを使用せずsmoothness
にタッチしない複数のカット画像を使用して実現しました.
実際、私は上記のように 100 Pushups アプリケーションのようなものを達成しようとしています.1つの リンクを取得しましたが、それはキャンバスを使用して達成され、画像を使用して達成したい. 100回の腕立て伏せ)?
これは、クリップパスを使用して思いついたものです。次の画像 (コーダーの色) を使用しています。背景は無地で、前景には透明な背景に青い円のみが含まれています。最初に背景画像が画面に描画され、次にクリップ パスが設定され、その上に前景の進行画像が適切に描画されます。
背景画像; http://i.imgur.com/Sf6kg.png
前景画像。http://i.imgur.com/Svtoh.png
そしてコード;
private class ProgressView extends View {
private Bitmap bgBitmap;
private Bitmap fgBitmap;
private RectF fullRect = new RectF();
private Path clipPath = new Path();
public ProgressView(Context context) {
super(context);
bgBitmap = BitmapFactory.decodeResource(
context.getResources(), R.drawable.bg);
fgBitmap = BitmapFactory.decodeResource(
context.getResources(), R.drawable.fg);
}
@Override
public void onDraw(Canvas c) {
fullRect.right = getWidth();
fullRect.bottom = getHeight();
c.drawBitmap(bgBitmap, null, fullRect, null);
float angle = SystemClock.uptimeMillis() % 3600 / 10.0f;
clipPath.reset();
clipPath.setLastPoint(getWidth() / 2, getHeight() / 2);
clipPath.lineTo(getWidth() / 2, getHeight());
clipPath.arcTo(fullRect, -90, angle);
clipPath.lineTo(getWidth() / 2, getHeight() / 2);
c.clipPath(clipPath);
c.drawBitmap(fgBitmap, null, fullRect, null);
invalidate();
}
}
一時的な画像を適切な画像に置き換えて、より適切な方法で角度を更新するのはそれほど難しくありません。
カスタムビューになり、onTouchEvent()
メソッドを処理し、ユーザーがビューに触れると再描画されます。
メソッドは次のonDraw()
ようなものをチェックします:
if(mIsBeingTouched){
//set colour to touched
}
doDraw(canvas);
///....
したがって、ユーザーがビューに触れると、カウントを増やしてからアーク カウントを増やします。
final float arcDistance = mCurrentCount * 3.6; //Based on a max of 100
canvas.drawArc(mBoundsRectF, 0f, mCurrentCount, mPaint);
次に、カウントに基づいて描画します。