翻译视图并获取点击事件

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;
}