我有一张图片,例如图片如下所示:
此图像包含两部分,第1部分,尺寸宽度 W ,高度 L ,第2部分(较小部分)宽度 w 和高度 h (将第一部分称为源,将第二部分称为目的地)。设第一个矩形的坐标(从左上角开始):顶部:100左:10右:200底:300,第二个矩形的坐标是(从左上角开始测量):左上50:500底部:100右:700
我想从源到目标设置动画,以便图像从源到目标进行翻译和放大。
所以我的第一个屏幕看起来像:
我的第二张图片看起来像:
如何在这两者之间进行补间? 我的代码(没有动画)如下所示:
public class SuperGame extends View implements OnGestureListener
{
int sreenHeight, screenWidth;
int drawCount = 0;
Bitmap bg;
public SuperGame(Context context, Bitmap bmp)
{
this.screenWidth = getContext().getResources().getDisplayMetrics().widthPixels;
this.screenHeight = getContext().getResources().getDisplayMetrics().heightPixels;
bg = BitmapFactory.decodeResource(getResources(),R.drawable.bg_img);
}
@Override
/* this function triggers the image change
*/
public boolean onDown(MotionEvent e) {
invalidate(0,0,screenWidth, screenHeight);
return true;
}
@Override
public void onDraw(Canvas canvas)
{
Rect dest = new Rect(0,0,screenWidth, screenHeight);
if (count==0) //draw the first image part
{
count=1;
Rect src = new Rect(100,10,200,300);//coordinates of rectangle 1
canvas.drawBitmap(bg, src, dest, new Paint());
}
else //draw the second image part - (I'd like to show movement/ transition between these)
{
Rect src = new Rect(50,500,100,700);//coordinates of rectangle 2
count=0;
canvas.drawBitmap(bg, src, dest, new Paint());
}
}
}
如何设置转换动画(包括zoomin和翻译)?
答案 0 :(得分:1)
您可能需要创建Rect / RectF类型的自定义valueAnimator。 代码示例如下:
public class RectFEvaluator
implements TypeEvaluator<RectF>
{
@Override
public RectF evaluate(float fraction, RectF srcRect, RectF destRect) {
RectF betweenRect = new RectF();
betweenRect.bottom = srcRect.bottom + fraction*(destRect.bottom-srcRect.bottom);
betweenRect.top = srcRect.top + fraction*(destRect.top-srcRect.top);
betweenRect.left = srcRect.left + fraction*(destRect.left-srcRect.left);
betweenRect.right = srcRect.right + fraction*(destRect.right-srcRect.right);
return betweenRect;
}
}
值animator将为您提供src Rect和dest Rect之间的中间值。 获得这些值后,使用动画更新它们