2

У меня есть изображение, например. изображение, показанное ниже: sample image source 3dwallpapersАнимация (Zoom and Translate) часть изображения на холсте андроида

Это изображение состоит из двух частей часть 1 ширины размера Вт и высотой L и часть 2 (меньшая часть) шириной ш и высотой ч (вызов часть первая как источник и часть 2 в качестве пункта назначения). Пусть координаты 1-го прямоугольника будут (измерены в верхнем левом углу): верх: 100 слева: 10 справа: 200 дна: 300 и координаты 2-го прямоугольника (как измерено в верхнем левом углу): верхний 50 левый: 500 bottom: 100 right: 700

Я хочу анимировать от источника к месту назначения, чтобы изображение переводилось и масштабировалось от источника к месту назначения.

Так что мой первый экран будет выглядеть следующим образом: enter image description here

и мое второе изображение будет выглядеть следующим образом: enter image description here

Как промежуточные кадры между этими двумя? Мой код (без анимации) выглядит следующим образом:

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

Привет @ User42, у меня есть такая же функция для реализации. Я должен показать часть изображения на экране, и когда пользователь выполняет поиск, я должен обновить другую часть экрана, как указано на экранах. Он должен иметь анимацию, перемещаясь из одного места в другое. Можете ли вы поделиться своим кодом, поскольку у меня заканчивается время, ища решение? – Noundla

ответ

1

Возможно, вам потребуется создать пользовательский метод ValueAnimator типа Rect/RectF. Пример кода приведен ниже:

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

} 

Значение аниматор даст вам промежуточные значения между Src Rect и Dest Rect. После того, как вы получили эти значения, обновили их с помощью анимации

Смежные вопросы