动画开始我触摸屏幕之后才 [英] Animation starts only after I've touched the screen

查看:95
本文介绍了动画开始我触摸屏幕之后才的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个顶栏容器和内容容器的布局。当在顶栏按钮点击,使用动画显示的垂直菜单。我的的minSdkVersion 是9。

I have a layout with a top bar container and a content container. When clicking on a button in the top bar, a vertical menu is displayed using an animation. My minSdkVersion is 9.

这工作得很好,当我启动应用程序,我还没有点击菜单按钮(即内容片段没有改变),但只要我点击了一个选项(然后替换content_container片段) ,垂直菜单不稳定的行为。菜单BTN的单击事件触发正确的,但它的垂直菜单并不总是显示(但有时...)。然而,当我按一下按钮,然后触摸屏幕,动画(显示或隐藏菜单)开始。

This works well when I start the app and I still haven't clicked a menu button (i.e. the content fragment has not changed), but as soon as I have clicked an option (and then replace the fragment in the content_container), the vertical menu behaves erratically. The click event of the menu btn is properly triggered, but the vertical menu is not always shown (but sometimes it is...). However, when I click the button and then touch the screen, the animation (show or hide the menu) starts.

我猜它是与垂直菜单重叠内容片段,然后替换内容片段进行修改以某种方式,但我找不到任何解决方案。

I guess it has something to do with the vertical menu overlapping the content fragment, and then replacing the content fragment modify it in some way, but I can't find any solution.

任何人都可以帮忙吗?

顶栏片段

    @Override
    public void onActivityCreated (Bundle savedInstanceState){

        super.onActivityCreated(savedInstanceState);

        toggleMenu(0);      

        Button btn_menu = (Button) getView().findViewById(R.id.btn_menu);
        btn_menu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mVerticalMenu.setVisibility(View.VISIBLE);
                toggleMenu(1000);
            }
        });
    }

    private void toggleMenu(int duration){
        if(mMenuIsOpen){

            TranslateAnimation anim1 = new TranslateAnimation(0,0,0,-(mHeight-mMenuVerticalOffset));
            anim1.setFillAfter(true);
            anim1.setDuration(duration);
            mVerticalMenu.setAnimation(anim1);

            AlphaAnimation anim2 = new AlphaAnimation(0.7f, 0.0f);
            anim2.setFillAfter(true);
            anim2.setDuration(duration);            

            menu_option_01.setOnClickListener(null);
            menu_option_02.setOnClickListener(null);
            menu_option_03.setOnClickListener(null);

            mMenuIsOpen = false;
        }
        else{

            TranslateAnimation anim1 = new TranslateAnimation(0,0,-(mHeight-mMenuVerticalOffset),0);
            anim1.setFillAfter(true);
            anim1.setDuration(duration);
            mVerticalMenu.setAnimation(anim1);

            AlphaAnimation anim2 = new AlphaAnimation(0.0f, 0.7f);
            anim2.setFillAfter(true);
            anim2.setDuration(duration);

            menu_option_01.setOnClickListener(mButtonClickListener);
            menu_option_02.setOnClickListener(mButtonClickListener);
            menu_option_03.setOnClickListener(mButtonClickListener);

            mMenuIsOpen = true;
        }

    }



    private OnClickListener mButtonClickListener = new OnClickListener()
    {
        public void onClick(View v)
        {
            toggleMenu(1000);

            if(!v.isSelected()){        


                FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();

                switch(v.getId()){

                case R.id.menu_option_01:

                    // replace content_container by fragment 1

                    break;

                case R.id.btn_02:

                    // replace content_container by fragment 2

                    break;      

                case R.id.btn_03:

                    // replace content_container by fragment 3

                    break;      

                }
            }
        }

    };

    private OnClickListener mBgClickListener = new OnClickListener()
    {
        public void onClick(View v)
        {
            toggleMenu(1000);           
        }
    };

主要布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/content_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="44dp" />

    <FrameLayout
        android:id="@+id/top_bar_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false" />

</RelativeLayout>

顶栏布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00000000" >

    <LinearLayout
        android:id="@+id/vertical_menu"
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:layout_marginTop="44dp"
        android:background="#ffffff"
        android:orientation="vertical"
        android:visibility="gone" >

      <!-- menu layout -->

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:background="#ffffff" >

        <Button
            android:id="@+id/btn_menu"
            android:layout_width="50dp"
            android:layout_height="44dp"
            android:background="@drawable/menubtn" />   

        <ImageView
            android:layout_width="130dp"
            android:layout_height="44dp"
            android:src="@drawable/logo"
            android:layout_alignParentRight="true" />
    </RelativeLayout>

</RelativeLayout>

推荐答案

在我的切换方法的末尾,我无效根视图:

At the end of my Toggle method, I invalidate the root view:

rootView.invalidate();

和现在的作品。不太清楚为什么我必须这样做,虽然...

and now it works. Not quite clear why I must do that though...

这篇关于动画开始我触摸屏幕之后才的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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