放大缩小动画

时间:2015-12-21 11:22:30

标签: android animation

单击图像时,我正在测试放大/缩小动画。但我没有得到我想要的结果。图像完全放大但不会完全缩小。要更好地了解我的问题,请参阅this video

这是我的代码:

zoom_in.XML

<set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" >
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="3"
    android:toYScale="3" >
</scale>
</set>

zoom_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" >
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.5"
    android:toYScale="0.5" >
</scale>

mainactivity

public class MainActivity extends Activity 
 {
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ImageButton pic = (ImageButton) findViewById(R.id.levelimg);
    pic.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v){
            final Dialog dialog = new Dialog(MainActivity.this);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setContentView(R.layout.dialogpic);
            dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
            dialog.show();
        }
    });
}
  }

我的dailog动画风格

<style name="DialogAnimation">
    <item name="android:windowEnterAnimation">@anim/zoom_in</item>
    <item name="android:windowExitAnimation">@anim/zoom_out</item>
    </style>

3 个答案:

答案 0 :(得分:2)

用这个改变你的代码。

zoom_in.xml

<scale
    android:duration="@android:integer/config_shortAnimTime"
    android:fromXScale="0.3"
    android:fromYScale="0.3"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1.0"
    android:toYScale="1.0" />

zoom_out.xml

<scale
    android:duration="@android:integer/config_shortAnimTime"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0"
    android:toYScale="0" />

这将为您解决问题。 :)

答案 1 :(得分:1)

如下所示更改缩小代码并检查一次,如果它不起作用,请告诉我。

   <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" >

        <scale
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:duration="

1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0"
        android:toYScale="0" >
    </scale>

答案 2 :(得分:0)

试试这个

public class MainActivity extends Activity {
   private ImageView iv;
   private Matrix matrix = new Matrix();
   private float scale = 1f;
   private ScaleGestureDetector SGD;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      iv=(ImageView)findViewById(R.id.imageView);
      SGD = new ScaleGestureDetector(this,new ScaleListener());
   }

   public boolean onTouchEvent(MotionEvent ev) {
      SGD.onTouchEvent(ev);
      return true;
   }

   private class ScaleListener extends ScaleGestureDetector.

   SimpleOnScaleGestureListener {
      @Override
      public boolean onScale(ScaleGestureDetector detector) {
         scale *= detector.getScaleFactor();
         scale = Math.max(0.1f, Math.min(scale, 5.0f));

         matrix.setScale(scale, scale);
         iv.setImageMatrix(matrix);
         return true;
      }
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.

      int id = item.getItemId();

      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}