翻译视图并获取点击事件
Translate a view and get click event
如果有人问过这个问题,首先请原谅。
我是 android 动画的新手。
我想要一个视图,假设一个图像视图(带有动画,即平滑移动)永久地将一个位置移动到屏幕的另一个位置,假设当前 X 坐标为 X+ 50 和类似的 Y 坐标为 Y+50。我能够使用 XML 翻译动画文件移动,但之后无法获得点击事件。我能够在布局中的原始位置而不是翻译位置获得点击事件.
任何人都可以指导我正确的轨道吗?
提前致谢。
您可能正在使用 view.startAnimation();
。这里的关键是以编程方式做你的animation
。
做
Animation animation = AnimationUtils.loadAnimation (this.context, R.anim.your_translate_animation);
animation .setStartOffset (2000);
yourView.startAnimation (animation);
animation.setAnimationListener (new AnimationListener () {
@Override
public void onAnimationStart (Animation animation) {
}
@Override
public void onAnimationRepeat (Animation animation) {
}
@Override
public void onAnimationEnd (Animation animation) {
//do you click functionality here...
}
});
P.S。如果您想以编程方式单击查看
做
yourView.performClick();
以编程方式制作动画。试试这段代码。可能有帮助
TranslateAnimation translateAnimation = new TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);
translateAnimation.setDuration(500);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//before animation
}
@Override
public void onAnimationEnd(Animation animation) {
//after animation
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
imageView.startAnimation(translateAnimation);
您使用的动画已被弃用。我展示了一个 ObjectAnimator 示例 class...而这个示例在片段中,所以我写了整个 onCreateView。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_screen, container, false);
ImageView image = (ImageView) rootView.findViewById(R.id.image);
ObjectAnimator translationY = ObjectAnimator.ofFloat(image, "translationY", 100);
translationY.setInterpolator(new AccelerateInterpolator());
ObjectAnimator translationX = ObjectAnimator.ofFloat(image, "translationX", 100);
translationX.setInterpolator(new AccelerateInterpolator());
AnimatorSet as = new AnimatorSet();
as.playTogether(translationX, translationY);
as.setDuration(2000);
as.start();
image.setOnClickListener(new View.OnClickListener() {
int sum = 0;
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Clicked: " + sum++, Toast.LENGTH_SHORT).show();
}
});
return rootView;
}
如果有人问过这个问题,首先请原谅。
我是 android 动画的新手。
我想要一个视图,假设一个图像视图(带有动画,即平滑移动)永久地将一个位置移动到屏幕的另一个位置,假设当前 X 坐标为 X+ 50 和类似的 Y 坐标为 Y+50。我能够使用 XML 翻译动画文件移动,但之后无法获得点击事件。我能够在布局中的原始位置而不是翻译位置获得点击事件.
任何人都可以指导我正确的轨道吗?
提前致谢。
您可能正在使用 view.startAnimation();
。这里的关键是以编程方式做你的animation
。
做
Animation animation = AnimationUtils.loadAnimation (this.context, R.anim.your_translate_animation);
animation .setStartOffset (2000);
yourView.startAnimation (animation);
animation.setAnimationListener (new AnimationListener () {
@Override
public void onAnimationStart (Animation animation) {
}
@Override
public void onAnimationRepeat (Animation animation) {
}
@Override
public void onAnimationEnd (Animation animation) {
//do you click functionality here...
}
});
P.S。如果您想以编程方式单击查看
做
yourView.performClick();
以编程方式制作动画。试试这段代码。可能有帮助
TranslateAnimation translateAnimation = new TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);
translateAnimation.setDuration(500);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//before animation
}
@Override
public void onAnimationEnd(Animation animation) {
//after animation
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
imageView.startAnimation(translateAnimation);
您使用的动画已被弃用。我展示了一个 ObjectAnimator 示例 class...而这个示例在片段中,所以我写了整个 onCreateView。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_screen, container, false);
ImageView image = (ImageView) rootView.findViewById(R.id.image);
ObjectAnimator translationY = ObjectAnimator.ofFloat(image, "translationY", 100);
translationY.setInterpolator(new AccelerateInterpolator());
ObjectAnimator translationX = ObjectAnimator.ofFloat(image, "translationX", 100);
translationX.setInterpolator(new AccelerateInterpolator());
AnimatorSet as = new AnimatorSet();
as.playTogether(translationX, translationY);
as.setDuration(2000);
as.start();
image.setOnClickListener(new View.OnClickListener() {
int sum = 0;
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Clicked: " + sum++, Toast.LENGTH_SHORT).show();
}
});
return rootView;
}