Android绘图矩形计时器与动画

时间:2013-05-07 07:22:25

标签: android animation view android-canvas draw

我正在尝试绘制动画绘制笔触矩形:

Rounded Rectangle Stroke Animation

此问题的任何kickstart都会有所帮助。使用视图,画布任何东西。

由于

2 个答案:

答案 0 :(得分:3)

好的,这是让你入门的东西,它不是完整的解决方案,但从这里你可以完成你的任务。

我正在做的是根据进度动态更新我的面具。我只画了一条线,但在你的情况下,你需要绘制四条线,根据进度制作一个蒙面矩形。这是代码让我知道,如果这有帮助:

public class DrawView extends View implements Runnable {

Bitmap mProgressBitmap;
Bitmap mMaskProgressBitmap;
Bitmap mResultBitmap;

Canvas mTempCanvas;
Canvas mMaskCanvas;

Paint mPaint;

Paint mWhitePaint;

Handler mHandler = new Handler();

float mProgress = 0;

static final long FRAME_TIME = 50;

public DrawView(Context context, AttributeSet attrs) {
    super(context, attrs);

    InputStream resource = getResources().openRawResource(R.drawable.timer);
    mProgressBitmap = BitmapFactory.decodeStream(resource);

    mMaskProgressBitmap = Bitmap.createBitmap(mProgressBitmap.getWidth(), mProgressBitmap.getHeight(), Bitmap.Config.ARGB_8888);
    mMaskCanvas = new Canvas(mMaskProgressBitmap);
    mMaskCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

    mResultBitmap = Bitmap.createBitmap(mProgressBitmap.getWidth(), mProgressBitmap.getHeight(), Bitmap.Config.ARGB_8888);

    mTempCanvas = new Canvas(mResultBitmap);

    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    mPaint.setDither(true);

    mWhitePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mWhitePaint.setColor(Color.WHITE);
    mWhitePaint.setStrokeWidth(50);

    mHandler.postDelayed(this, FRAME_TIME);
}

@Override
public void onDraw(Canvas canvas) {

    mTempCanvas.drawBitmap(mMaskProgressBitmap, 0, 0, null);
    mTempCanvas.drawBitmap(mProgressBitmap, 0, 0, mPaint);

    canvas.drawBitmap(mResultBitmap, 0, 0, null);
}

@Override
public void run() {

    mProgress += 0.01f;

    mMaskCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
    mMaskCanvas.drawLine(0, 0, (float)mProgressBitmap.getWidth() * mProgress, 0, mWhitePaint);

    this.invalidate();

    mHandler.postDelayed(this, FRAME_TIME);
}

}

答案 1 :(得分:1)

我认为您可以使用AnimationDrawable实现非常基本的功能,并创建逐帧动画。显然,你使用的帧越多越平滑。

<!-- Animation frames are wheel0.png -- wheel5.png files inside the
 res/drawable/ folder -->
 <animation-list android:id="@+id/selected" android:oneshot="false">
    <item android:drawable="@drawable/wheel0" android:duration="50" />
    <item android:drawable="@drawable/wheel1" android:duration="50" />
    ...
 </animation-list>

其他选项是使用ClipDrawable来屏蔽矩形并为蒙版设置动画。 Customize Your Progress Bar有一个教程,它使用相同的逻辑。我希望如此。

看看this sample。它是闪光但它使用相同的剪裁技术来实现抚摸效果。

如果我没弄错的话,Android Canvas会有一些clip方法来屏蔽您的图片:clipPathclipRectclipRegion。但我不确定它是否可以动画。去看一下。

相关问题