嗨我有这个带有图像网格列表的应用程序,我的想法是当用户点击其中一个图像时,浮动图像将显示在同一位置并激活到主图像持有者位置。我试过这样的东西,我在运行时添加一个视图并将其设置为性能不变,我的问题是复制在我的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);
}
});
击> <击> 撞击>
答案 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)