5

黒と青の2つの画像があり、青色の画像をタッチすると進行のように塗りつぶされます.100プッシュアップアプリケーションのように、キャンバスを使用せずsmoothnessにタッチしない複数のカット画像を使用して実現しました.

実際、私は上記のように 100 Pushups アプリケーションのようなものを達成しようとしています.1つの リンクを取得しましたが、それはキャンバスを使用して達成され、画像を使用して達成したい. 100回の腕立て伏せ)?

ここに画像の説明を入力

4

2 に答える 2

4

これは、クリップパスを使用して思いついたものです。次の画像 (コーダーの色) を使用しています。背景は無地で、前景には透明な背景に青い円のみが含まれています。最初に背景画像が画面に描画され、次にクリップ パスが設定され、その上に前景の進行画像が適切に描画されます。

背景画像; 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();
    }   
}

一時的な画像を適切な画像に置き換えて、より適切な方法で角度を更新するのはそれほど難しくありません。

于 2013-01-18T21:02:09.933 に答える
1

カスタムビューになり、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);

次に、カウントに基づいて描画します。

于 2013-01-17T13:56:24.793 に答える