- 应用比例为放大和缩小
- 应用转换为轻微各地
是移动它,你的理解是正确的。
您可以使用矩阵来实现预期的结果,如下所示。
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);
}
}