怎样定位一个视图,以便点击动画作品后, [英] How to position a view so the click works after an animation

查看:117
本文介绍了怎样定位一个视图,以便点击动画作品后,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前使用老九机器人动画一个RelativeLayout的像一个滑块菜单,向下滑动形成顶部。我试过在很多方面,有人可以提个建议吗?

I'm currently using Nine Old Androids to animate a RelativeLayout like a slider menu, which slides down form the top. I've tried in many ways, Can someone make a suggestion?

下面是动画code:

  private OnClickListener slideClick = new OnClickListener(){
    @Override
    public void onClick(View v) {
        slideGroups.bringToFront();

        if(!mPulledDown) {
            ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", slideGroups.getHeight()-80);
            oa.addListener(new AnimatorListener() {
                @Override
                public void onAnimationStart(Animator arg0) {}

                @Override
                public void onAnimationRepeat(Animator arg0) {}

                @Override
                public void onAnimationEnd(Animator arg0) {
                    arrow.setImageResource(R.drawable.arrowup);
                    if(Application.getAndroidAPILevel() < 11) {
                        // only if pre 3.0 (api level 11)
                        Toast.makeText(FriendsActivity.this, String.format("api level %s", 
                                Application.getAndroidAPILevel()), Toast.LENGTH_SHORT).show();
                        //RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) slideGroups.getLayoutParams();

                        // clear animation to prevent flicker
                        slideGroups.clearAnimation();

                        // set new "real" position of wrapper
                        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, slideGroups.getWidth());
                        //lp.addRule(RelativeLayout.BELOW, R.id.branchFinderIncludeHeader);
                        slideGroups.setLayoutParams(lp);

                    }
                }

                @Override
                public void onAnimationCancel(Animator arg0) {}
            });
            oa.start();
        }
        else 
        {
            ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", 0);
            oa.addListener(new AnimatorListener() {
                @Override
                public void onAnimationStart(Animator arg0) {}

                @Override
                public void onAnimationRepeat(Animator arg0) {}

                @Override
                public void onAnimationEnd(Animator arg0) {
                    arrow.setImageResource(R.drawable.arrowdown);
                    if(Application.getAndroidAPILevel() < 11) {
                        // only if pre 3.0 (api level 11)
                        Toast.makeText(FriendsActivity.this, String.format("api level %s", 
                                Application.getAndroidAPILevel()), Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onAnimationCancel(Animator arg0) {}
            });
            oa.start();
        }

        mPulledDown = !mPulledDown;         
    }
};

我只是需要一些与SDK 4级和新的工作。目前,当扩大触摸/攻丝传递该事件列表中的滑块的下方。请让我知道是否需要任何其他信息。 slideGroups是RelativeLayout的。箭是一个ImageView的。 groupsButton与文本和图像按钮的LinearLayout。 groupsButton应该可以点击;这就是扩张和应该崩溃了。

I just need something to work with sdk level 4 and newer. Currently, touching/tapping passes that event to the list underneath the slider when expanded. Please let me know if any other information is needed. slideGroups is the RelativeLayout. arrow is an imageview. groupsButton is a LinearLayout with text and an image button. groupsButton should be clickable; that's what expands and is supposed to collapse it.

先谢谢了。

推荐答案

有几个人贡献的编辑我的问题的解决方案。我想给他们贷款,但不能给予好评的编辑。对于后人,这里是为我工作的解决方案。

A few people have contributed by editing my question with solutions. I'd like to give them credit, but can't upvote an edit. For posterity, here is the solution that works for me.

int originalMarginLeft = 0;
int originalMarginTop = 0;
int originalMarginRight = 0;
int originalMarginBottom = 0;
int originalLeft = 0;
int originalTop = 0;
int originalRight = 0;
int originalBottom = 0;
int originalX = 0;
int originalY = 0;
int originalHeight = 0;

private OnClickListener slideClick = new OnClickListener(){
    @Override
    public void onClick(View v) {
        slideGroups.bringToFront();

        if(originalMarginLeft == 0) {
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) slideGroups.getLayoutParams();
            originalMarginLeft = params.leftMargin;
            originalMarginTop = params.topMargin;
            originalMarginRight = params.rightMargin;
            originalMarginBottom = params.bottomMargin;
            originalLeft = slideGroups.getLeft();
            originalTop = slideGroups.getTop();
            originalRight = slideGroups.getRight();
            originalBottom = slideGroups.getBottom();
            originalHeight = params.height;
        }

        if(!mPulledDown) {
            ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", originalHeight);
            oa.addListener(new AnimatorListener() {
                @Override
                public void onAnimationStart(Animator arg0) {}

                @Override
                public void onAnimationRepeat(Animator arg0) {}

                @Override
                public void onAnimationEnd(Animator arg0) {
                    arrow.setImageResource(R.drawable.arrowup);
                    if(Application.getAndroidAPILevel() < 11) {

                        slideGroups.clearAnimation();
                        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(slideGroups.getWidth(), slideGroups.getHeight());
                        lp.leftMargin = originalMarginLeft;
                        lp.rightMargin = originalMarginRight;
                        slideGroups.setLayoutParams(lp);

                    }
                }

                @Override
                public void onAnimationCancel(Animator arg0) {}
            });
            oa.start();
        }
        else 
        {
            ObjectAnimator oa = ObjectAnimator.ofFloat(slideGroups, "translationY", -originalHeight+60);
            oa.addListener(new AnimatorListener() {
                @Override
                public void onAnimationStart(Animator arg0) {}

                @Override
                public void onAnimationRepeat(Animator arg0) {}

                @Override
                public void onAnimationEnd(Animator arg0) {
                    arrow.setImageResource(R.drawable.arrowdown);
                    if(Application.getAndroidAPILevel() < 11) {

                        slideGroups.clearAnimation();
                        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(slideGroups.getWidth(), slideGroups.getHeight());
                        lp.leftMargin = originalMarginLeft;
                        lp.rightMargin = originalMarginRight;
                        lp.topMargin = originalMarginTop;
                        lp.bottomMargin = originalMarginBottom;
                        slideGroups.setLayoutParams(lp);
                    }
                }

                @Override
                public void onAnimationCancel(Animator arg0) {}
            });
            oa.start();
        }

        mPulledDown = !mPulledDown;         
    }
};

这篇关于怎样定位一个视图,以便点击动画作品后,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆