在运行时根据用户触摸创建新的图像视图,并将Image Image动画到另一个ImageVIew

时间:2014-06-10 06:10:50

标签: android animation

嗨我有这个带有图像网格列表的应用程序,我的想法是当用户点击其中一个图像时,浮动图像将显示在同一位置并激活到主图像持有者位置。我试过这样的东西,我在运行时添加一个视图并将其设置为性能不变,我的问题是复制在我的gridview中单击的相同img视图,并在onXouchLister上设置基于getX和getY的浮动位置,但是浮动图像没有显示用户触摸的位置和图像滞后,这是我的代码

 public class MainActivity extends ActionBarActivity implements OnClickListener,
        OnPageChangeListener, UpdateAvatarProgressListener, OnTouchListener {

      ViewGroup mParentView;

      float getX;
      float getY;

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

        mParentView = (ViewGroup) findViewById(R.id.fragment_edit_id);
        img = new ImageView(MainActivity.this);     
        img.setVisibility(View.GONE);
        mParentView.addView(img);
        GridView gridView= (GridView) v.findViewById(R.id.img_gridview);
          gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                 img = (ImageView) view.findViewById(R.id.image_holder);
                 img.setVisibility(View.VISIBLE);

      int[] img_coordinates = new int[2];
      mainImageHolder.getLocationOnScreen(img_coordinates);
      float x = (float) (img_coordinates[0] + mainImageHolder.getWidth() / 2.0);
      float y = (float) (img_coordinates[1] + mainImageHolder.getHeight() / 2.0);
      TranslateAnimation anim = new TranslateAnimation(getX, getY, x, y);
      anim.setDuration(800);

      anim.setAnimationListener(new TranslateAnimation.AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) { 
          img.setVisibility(View.GONE);
        }
      });

      img.startAnimation(anim);
            }
        }
      }

      @Override
      public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        getX = event.getX();
        getY = event.getY();
        return false;
      }
    }

我需要这样的link但是我不想使用ViewOverlay,因为它只支持api 18,我想知道窗口管理器,但我读到你不能在windowmanager中制作动画使用自定义。我也使用片段,

我有这个图像视图,一个是主图像视图和一些小图像视图。

<击>
mainimage

imageview1
imageview2
imageview3
imageview4
imageview5

我是动画新手,我想尝试一下

现在当我点击imageview1时 我想动画从imageview1到mainimage的移动效果 然后将mainimage的值设置为imageview1 如果点击了其他图像也一样。

这是我的代码

   griView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          ImageLibrary imgLib = adapter.get(position);  


              mainImage = imgLib;


        }
      });

我试过这样的事情

 mImagesGridView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
          // TODO Auto-generated method stub
          getX = event.getX();
          getY = event.getY();
          return false;
        }
      });

      mImagesGridView.setOnItemClickListener(new OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

          TranslateAnimation anim = new TranslateAnimation(getX,  getY, mGroupImageImageView.getX(),
              mGroupImageImageView.getY());
          anim.setDuration(600);

          anim.setAnimationListener(new TranslateAnimation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
              // set image in mainImage view


              final float growTo = 0.7f;
              final long duration = 200;

              ScaleAnimation grow = new ScaleAnimation(1, growTo, 1, growTo,
                  Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
              grow.setDuration(duration / 2);
              ScaleAnimation shrink = new ScaleAnimation(growTo, 1, growTo, 1,
                  Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
              shrink.setDuration(duration / 2);
              shrink.setStartOffset(duration / 2);
              AnimationSet growAndShrink = new AnimationSet(true);
              growAndShrink.setInterpolator(new LinearInterpolator());
              growAndShrink.addAnimation(grow);
              growAndShrink.addAnimation(shrink);
              mGroupImageImageView.startAnimation(growAndShrink); 
            }
          });

          view.findViewById(R.id.Image_imageview).startAnimation(anim);

        }
      });

<击>

2 个答案:

答案 0 :(得分:0)

你可以试试这个

TranslateAnimation anim = new TranslateAnimation(0, 0, amountToMoveRight, amountToMoveDown);
anim.setDuration(1000);

anim.setAnimationListener(new TranslateAnimation.AnimationListener() {

@Override
public void onAnimationStart(Animation animation) { }

@Override
public void onAnimationRepeat(Animation animation) { }

@Override
public void onAnimationEnd(Animation animation) 
{
   // set image in mainImage view 
}
});

view.startAnimation(anim);

答案 1 :(得分:0)

我猜这个来自Google的示例符合您的要求

http://developer.android.com/training/animation/zoom.html

获取源代码并进行一些修改。