2012-04-17 2 views
0

4 개의 이미지가 화면의 다른 위치에 배치됩니다. 이제는 화면 너비와 높이에 맞게 클릭하여 크기를 조절하고 싶습니다. 클릭하면 화면의 다른 내용이 페이드 아웃됩니다. 현재 내가 XML이 잘못된 것을 알고 있기 때문에 zoom_image.xml 코드 위Android Animate Scale 화면 너비와 높이에 맞게 이미지

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator"> 
    <scale android:fromXScale="0.0" android:fromYScale="0.0" 
      android:toXScale="1.0" android:toYScale="1.0" 
      android:duration="700" android:fillBefore="false" /> 
    <translate android:fromXDelta="0.0" android:fromYDelta="1.0" 
      android:duration="700" /> 
</set> 

가 작동하지 않는 곳으로 그들에게

Animation logoMoveAnimation = AnimationUtils.loadAnimation(this, R.anim.zoom_image); 
view.startAnimation(logoMoveAnimation); 

을 확장하기 위해 다음과 같은 코드를 사용하고 난 코딩에 뭔가 특별한해야 .

+0

어떤 생각을 다음과 같은 코드를 사용하여 종료? –

답변

3

나는 누구에게

final int initialWidth = v.getWidth(); 
     final int initialHeight = v.getHeight(); 
     Log.v("WIDTH_", Integer.toString(initialWidth)); 
     Log.v("HEIGHT_", Integer.toString(initialHeight)); 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     final int finalHeight = displaymetrics.heightPixels; 
     final int finalWidth = displaymetrics.widthPixels; 
     Log.v("WIDTH_F", Integer.toString(finalWidth)); 
     Log.v("HEIGHT_F", Integer.toString(finalHeight)); 
     final int animationDuration = 1500; 
     final float stepX = (float)((float)(finalWidth - initialWidth))/animationDuration; 
     final float stepY = (float)((float)(finalHeight - initialHeight))/animationDuration; 
     Log.v("stepX", Float.toString(stepX)); 
     Log.v("stepY", Float.toString(stepY)); 
     final RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
    Animation a = new Animation() { 
       @Override 
       protected void applyTransformation(float interpolatedTime, Transformation t) { 
        int newWidth, newHeight; 
        Log.v("INTERPOLATION_T", Float.toString(interpolatedTime)); 
        newWidth = (int)Math.ceil((initialWidth + stepX*interpolatedTime*animationDuration)); 
        newHeight = (int)Math.ceil((initialHeight + stepY*interpolatedTime*animationDuration));        
        if(v.getTag().toString().equals("1")) { 
         //layoutParams.setMargins(0, (int)-interpolatedTime*initialHeight, 0, 0); 
        } 
        else if(v.getTag().toString().equals("2")) { 
         layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.separator1); 
         //layoutParams.setMargins((int)-interpolatedTime*initialWidth, (int)-interpolatedTime*initialHeight, 0, 0); 
        } 
        else if(v.getTag().toString().equals("3")) { 
         layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.separator2); 
         //layoutParams.setMargins((int)-interpolatedTime*initialWidth, (int)-interpolatedTime*initialHeight, 0, 0); 
        } 
        else if(v.getTag().toString().equals("4")) { 
         layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.separator3); 
         //layoutParams.setMargins((int)-interpolatedTime*initialWidth, (int)-interpolatedTime*initialHeight, 0, 0); 
        } 
        v.setLayoutParams(layoutParams); 
        v.getLayoutParams().height = newHeight; 
        v.getLayoutParams().width = newWidth; 
        v.requestLayout(); 
       } 
       @Override 
       public boolean willChangeBounds() { 
        return true; 
       } 
      }; 

      a.setInterpolator(new LinearInterpolator()); 
      a.setDuration(animationDuration); 
      a.setFillAfter(true); 
      v.startAnimation(a); 
+0

이 코드를 사용해 보았는데 애니메이션이 매끄럽지 않습니다. 주변에서 어떤 작업을 찾을 수 있었습니까? –

0

하면 시도 - 이미지 뷰의 XML 속성에

ImageView view = <from xml>; 
view.startAnimation(logoMoveAnimation); 

그리고 설정 scaletype = fitxy합니다.

관련 문제