2

我有一张图片,例如下图: 示例图像源 3dwallpapers

此图像有大小宽度W和高度L的两个部分第 1部分和宽度w和高度h的第 2 部分(较小部分)(将第 1 部分称为源,第 2 部分称为目标)。让第一个矩形的坐标为(从左上角测量):顶部: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());
        }
    }
}

如何为过渡设置动画(涉及放大和翻译)?

4

1 回答 1

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;
    }

}

value animator 将为您提供 src Rect 和 dest Rect 之间的中间值。获得这些值后,使用动画更新它们

于 2013-10-17T05:34:51.063 回答