2013-12-02 1 views
13

Я хочу переместить некоторый вид из любой позиции в центр экрана и масштаб параллельно. Если это слишком сложно, перевести и шкала также приемлемо. Но я не мог этого добиться. Я думаю, что это проблема с точкой опоры. Но, к сожалению, я не нашел решения. Пожалуйста помоги. Может быть, это легко для тех, кто разрабатывает игры, о которых я ничего не делал.Режимы перевода и масштабирования параллельно

Ниже мой код:

private void moveViewToScreenCenter(final View view){ 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    int statusBarOffset = dm.heightPixels - rootLayout.getMeasuredHeight(); 

    int originalPos[] = new int[2]; 
    view.getLocationOnScreen(originalPos); 

    int xDelta = (dm.widthPixels - view.getMeasuredWidth())/2 - originalPos[0]; 
    int yDelta = (dm.heightPixels - view.getMeasuredHeight())/2 + statusBarOffset - originalPos[1]; 

    AnimationSet animSet = new AnimationSet(true); 
    animSet.setFillAfter(true); 
    animSet.setDuration(1000); 
    animSet.setInterpolator(new BounceInterpolator()); 
    TranslateAnimation translate = new TranslateAnimation(0, xDelta , 0, yDelta); 
    animSet.addAnimation(translate); 
    ScaleAnimation scale = new ScaleAnimation(1f, 2f, 1f, 2f, ScaleAnimation.RELATIVE_TO_PARENT, .5f, ScaleAnimation.RELATIVE_TO_PARENT, .5f); 
    animSet.addAnimation(scale); 
    view.startAnimation(animSet); 
} 

Update: код выше может обрабатывать ImageView из верхнего левого региона, те из нижней правой области идет по диагонали через экран и исчезает.

ответ

20

После нескольких неудачных испытаний я сделал это, что слишком удивительно.

Ниже приведен код, он может быть использован для перемещения любого вида в макете в центр этого макета:

private void moveViewToScreenCenter(final View view){ 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 

    int originalPos[] = new int[2]; 
    view.getLocationOnScreen(originalPos); 

    int xDelta = (dm.widthPixels - view.getMeasuredWidth() - originalPos[0])/2; 
    int yDelta = (dm.heightPixels - view.getMeasuredHeight() - originalPos[1])/2; 

    AnimationSet animSet = new AnimationSet(true); 
    animSet.setFillAfter(true); 
    animSet.setDuration(1000); 
    animSet.setInterpolator(new BounceInterpolator()); 
    TranslateAnimation translate = new TranslateAnimation(0, xDelta , 0, yDelta); 
    animSet.addAnimation(translate); 
    ScaleAnimation scale = new ScaleAnimation(1f, 2f, 1f, 2f, ScaleAnimation.RELATIVE_TO_PARENT, .5f, ScaleAnimation.RELATIVE_TO_PARENT, .5f); 
    animSet.addAnimation(scale); 
    view.startAnimation(animSet); 
} 
+2

Вашего 'animSet.setFillAfter (истина);' спас мой день :) – User3

+1

но это не работает для меня :( –

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

  • Нет связанных вопросов^_^