Android移动按钮和运行时的背景

时间:2014-03-31 20:04:58

标签: android android-imageview android-animation

我试图制作一个标签外观 - 类似按钮的行背景为ImageView。

这是ImageView:

enter image description here

现在在此图像上,片段加载时有三个按钮。

enter image description here

当我点击按钮1时: 有两种情况: 1)当屏幕看起来像上面的图像,然后我想将按钮向右移动,所以屏幕看起来像这样:

enter image description here

当它看起来像上面的图像时,我希望它返回到第一个图像状态。

最后一种情况是,当用户按下B3时,我希望它对B1做出反应,但对另一方做出反应,如下所示:

enter image description here

到目前为止,我尝试了很多方法来尝试这个,都没有用,似乎当我动画移动时按钮停留在同一个地方:

到目前为止,这是我的代码:

btn_spa.setOnClickListener(new OnClickListener() 
        {

            @Override
            public void onClick(View v) 
            {
                isMapPressed=false;
                isInfoPressed=false;
                int toMoveNow=0;
                if(!isSpaPressed)
                {

                    if(isMapPressed)
                        toMoveNow=(toMove/2)+40;
                    else
                        toMoveNow=-(toMove/2+40);
                    int[] arr = new int[]{0,0};

                    btn_spa.getLocationOnScreen(arr);

                    Animation animation  = new TranslateAnimation(arr[0], toMoveNow, 0, 0);
                    animation.setDuration(1000);
                    animation.setFillAfter(true);
                    //rel_buttons_wrapper.startAnimation(animation);
                    btn_info.startAnimation(animation);
                    btn_map.startAnimation(animation);
                    btn_spa.startAnimation(animation);
                    Toast.makeText(getActivity(), "Button spa clicked", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btn_map.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) 
            {
                isSpaPressed=false;
                isInfoPressed=false;
                int toMoveNow=0;
                if(!isMapPressed && isSpaPressed)
                {
                    toMoveNow=-(toMove/2+40);
                    int[] arr = new int[]{0,0};
                    btn_map.getLocationOnScreen(arr);
                    Animation animation  = new TranslateAnimation(arr[0], toMoveNow, 0, 0);
                    animation.setDuration(1000);
                    animation.setFillAfter(true);
                //  rel_buttons_wrapper.startAnimation(animation);
                    btn_info.startAnimation(animation);
                    btn_map.startAnimation(animation);
                    btn_spa.startAnimation(animation);
                    Toast.makeText(getActivity(), "Button map clicked", Toast.LENGTH_SHORT).show();

                }
                else
                {
                    toMoveNow=(toMove/2+40);
                    int[] arr = new int[]{0,0};
                    btn_map.getLocationOnScreen(arr);
                    Animation animation  = new TranslateAnimation(arr[0], toMoveNow, 0, 0);
                    animation.setDuration(1000);
                    animation.setFillAfter(true);
                //  rel_buttons_wrapper.startAnimation(animation);
                    btn_info.startAnimation(animation);
                    btn_map.startAnimation(animation);
                    btn_spa.startAnimation(animation);
                    Toast.makeText(getActivity(), "Button map clicked", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btn_info.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) 
            {

                int toMoveNow=0;
                if(!isInfoPressed && isSpaPressed)
                {
                    toMoveNow=(toMove/2)+40;
                    int[] arr = new int[]{0,0};
                    btn_info.getLocationOnScreen(arr);
                    Animation animation  = new TranslateAnimation(arr[0], toMoveNow, 0, 0);
                    animation.setDuration(1000);
                    animation.setFillAfter(true);
                    rel_buttons_wrapper.startAnimation(animation);
                    btn_info.startAnimation(animation);
                    btn_map.startAnimation(animation);
                    btn_spa.startAnimation(animation);
                    Toast.makeText(getActivity(), "Button info clicked", Toast.LENGTH_SHORT).show();

                }
                else
                {
                    toMoveNow=-(toMove/2);
                    int[] arr = new int[]{0,0};
                    btn_info.getLocationOnScreen(arr);
                    Animation animation  = new TranslateAnimation(arr[0], toMoveNow, 0, 0);
                    animation.setDuration(1000);
                    animation.setFillAfter(true);
                    rel_buttons_wrapper.startAnimation(animation);
                    btn_info.startAnimation(animation);
                    btn_map.startAnimation(animation);
                    btn_spa.startAnimation(animation);
                    Toast.makeText(getActivity(), "Button info clicked", Toast.LENGTH_SHORT).show();
                }
                isSpaPressed=false;
                isMapPressed=false;

            }
        });

对于这个长期问题,我很抱歉,我希望尽可能提供信息。

任何帮助都是好人,

亲切的问候。

1 个答案:

答案 0 :(得分:0)

你可以使用ObjectAnimator类,它会移动视图及其边界,以便它们在移动时实际移动,这是一个教程: http://developer.android.com/guide/topics/graphics/prop-animation.html#object-animator