翻译视图并获取点击事件

时间:2015-01-28 06:25:30

标签: android android-animation

首先请原谅我这个问题。

我是Android动画的新手。

我想要一个视图让我们说一个图像视图(带有动画,即平滑移动)将一个位置永久移动到屏幕的某个其他位置,让我们说当前 X坐标到X + 50并且类似地Y协调到Y + 50 。我能够使用XML翻译动画文件移动但之后无法获得点击事件。我能够在布局中的原始位置获得点击事件而不是从翻译位置

有人能引导我走上正轨吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

您使用的动画已弃用。我展示了ObjectAnimator类的示例......此示例位于片段中,因此我编写了整个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;
}

答案 1 :(得分:2)

以编程方式进行动画制作。试试这个代码。这可能会有所帮助

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

答案 2 :(得分:0)

您可能正在使用view.startAnimation();。这里的关键是以编程方式进行animation

DO

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。如果要以编程方式单击视图

DO

yourView.performClick();