我是初学者,所以请耐心等待。
我有一个位图图片,我希望以编程方式为其设置动画。
我想在视频“独立国家”中获得徽标的动画
https://www.youtube.com/watch?v=yRU2rU2k_NI
跳过0:20来看。
无论如何,这是我所理解的,我必须这样做。如果我错了,请纠正我。
我打算制作一个对象,有一个
public void draw(Canvas canvas)
将使用位图的方法。
另外,我是否需要使用Matrix,或者直接修改画布是否足够?
提前致谢!
答案 0 :(得分:1)
- 应用缩放以放大和缩小
- 应用转换以稍微移动它
醇>
是的,您的理解是正确的。
您可以使用矩阵来达到预期的结果,如下所示。
public class LogoView extends View {
public LogoView(Context context) {
super(context);
init();
}
public LogoView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public LogoView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
logo = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
logoLeft = -logo.getWidth() >> 1;
logTop = -logo.getHeight() >> 1;
matrix = new Matrix();
}
private Bitmap logo;
private Matrix matrix;
private float logoLeft, logTop;
private float SCALE_FACTOR = 0.07f;
private float TRANSLATE_FACTOR = 0.03f;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
matrix.reset();
matrix.setTranslate(getWidth() >> 1, getHeight() >> 1);
canvas.setMatrix(matrix);
float scaleFactor = (float) (Math.random() * SCALE_FACTOR) + 1.f;
canvas.scale(scaleFactor, scaleFactor);
float dx = (float) ((Math.random() - 0.5) * TRANSLATE_FACTOR) * logo.getWidth();
float dy = (float) ((Math.random() - 0.5) * TRANSLATE_FACTOR) * logo.getHeight();
canvas.translate(dx, dy);
canvas.drawBitmap(logo, logoLeft, logTop, null);
postInvalidateDelayed(150);
}
}