Android实现新浪微博客户端tab时遇到bug、


问题解决了、详细看回答一楼。。

但是有一个新的问题出现了,那就是在对RadioGroup设置onTouchListener监听器的时候,一直触发不了事件。。是因为RadioGroup设置不了触摸监听器吗还是怎么样?

·······························
我想要做一个类似新浪微博客户端的tab显示,当我选中某个按钮时,会有一个橙色的显示条表示选中,新浪微博客户端截图如下:
新浪微博截图
我用了RadioGroup和自定义了一个继承LinearLayout的自定义控件(用来实现橙色条的显示),然后用TranslateAnimation来控制橙色下标的显示和移动动画、如下图所示。。
自己实现的tab
下面是控制RadioGroup的监听器


 /**
     *ul_fm是我的自定义控件,rg_fm是radioGroup控件
     */
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        int index = group.indexOfChild(rg_fm.findViewById(checkedId));
        ul_fm.setCurrentItem(index);
    }

自定义控件实现的代码:


 /**
     * 有动画的切换底部橙色导航栏
     *
     * @param item 需要显示橙色的下标
     */
    public void setCurrentItem(int item) {
        final View oldView = getChildAt(mCurrentItem);
        final View newView = getChildAt(item);

        TranslateAnimation translateAnimation = new TranslateAnimation(
                Animation.REVERSE, 0,
                Animation.REVERSE, item - mCurrentItem,
                Animation.REVERSE, 0,
                Animation.REVERSE, 0);

        translateAnimation.setDuration(20);
        translateAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                    oldView.setBackgroundResource(R.color.transparent);
                    newView.setBackgroundResource(R.color.orange);
                    oldView.clearAnimation();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }
        });

        oldView.setAnimation(translateAnimation);
        mCurrentItem = item;

        invalidate();
    }

但是重点来了,实现了点击可以切换橙色下标的动画,但是有一个严重的bug,就是当我连续且快速的同时点击两个按钮时,会出现以下的情况,同时显示了两个橙色下标。。。
tab出现的bug

求大神们帮忙看看

Android Animation

きDした秀吉 9 years, 7 months ago

为啥要用radioGroup呢?

zafa00 answered 9 years, 7 months ago

......还是多谢分享,遇到过类似大坑....

MouMou酱 answered 9 years, 7 months ago

有大神帮忙回答吗


被自己蠢哭、其实问题解决方法应该很简单。
昨天从translateAnimation的动画延迟开始找问题、、一直解决不到。后来放弃睡一觉。

第二天起床、在想是不是因为多点触控造成的,然后就从设置radiogroup的触摸监听器onTouchListener、radioButton设置onClick监听器等等。。

第一、如果设置了RadioButton的onClick监听器,问题仍会出现

第二、radioGroup设置onTouchListener监听器,但是事件一直没有被触发、这是一个新的问题,,求大神来解答。

最后的最后、、我突然闪过一个属性android:splitMotionEvents="false",试着禁止radioGroup的多点触控,这样子不久可以解决单点触控触发了吗、、不多说,马上试了一下,成功了!!!

成功的一刹那,,有种撞墙的冲动、、各位别拦我


 <RadioGroup
        android:id="@+id/pwb_radiogroup_status_detail"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:orientation="horizontal"
        android:splitMotionEvents="false">

wzqgood answered 9 years, 7 months ago

Your Answer