当前位置: 首页 > 知识库问答 >
问题:

车展

凌照
2023-03-14

我有一个右侧带有字母索引器的gridview,并将其可见性设置为view。违约了。当我开始滚动网格视图时,我希望索引器显示动画,当我停止滚动时,索引器也会自动隐藏

 gridView.setOnScrollListener(new AbsListView.OnScrollListener() {
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub

                    mLetter.setVisibility(View.VISIBLE);

            }

            public void onScrollStateChanged(AbsListView view, int scrollState) {
                    if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                Animation animation = new TranslateAnimation(0, 200, 0, 0);
                                animation.setDuration(500);
                                mLetter.startAnimation(animation);
                                mLetter.setVisibility(View.GONE);
                            }
                        }, 5000);

                    }

            }
        });

我的问题是:

  1. 我还没有成功地使索引器显示动画。在上面的代码中,它只是将可见性更改为view.visible.
  2. 当我滚动网格模式多次它检测到所有的触摸和隐藏动画将运行许多时间一样多的触摸检测到。我的意思是如果我滚动/触摸它3次,动画将运行3次。如何避免这种情况?

共有2个答案

杨赞
2023-03-14

几个小时后,我终于找到了自己的答案,其实很简单

gridview.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                    //when first touch
                    case MotionEvent.ACTION_DOWN:
                        if(mLetter.getVisibility() == View.GONE){ //make sure indexer doesn't exist
                            Animation animation = new TranslateAnimation(100, 0, 0, 0);
                            animation.setDuration(500);
                            mLetter.startAnimation(animation);
                            mLetter.setVisibility(View.VISIBLE);
                        }
                        break;

                    case MotionEvent.ACTION_MOVE:
                        mLetter.setVisibility(View.VISIBLE);
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                }
                return false;
            }
        });



        gridview.setOnScrollListener(new AbsListView.OnScrollListener() {
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub

            }

            public void onScrollStateChanged(AbsListView view, int scrollState) {
                state = scrollState;
                if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            if (state == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                                //make sure indexer is exist AND is not currently touched
                                if (mLetter.getVisibility() == View.VISIBLE && !mLetter.getBool()) {
                                    Animation animation = new TranslateAnimation(0, 200, 0, 0);
                                    animation.setDuration(500);
                                    mLetter.startAnimation(animation);
                                    mLetter.setVisibility(View.GONE);

                                }
                            }

                        }
                    }, 5000);


                }

            }
        });

这成功地防止动画复制。希望这能帮助某人

云承天
2023-03-14

在网格模式上使用TouchListener:

  boolean isLetterShowing = false;
  gridView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action){
                case MotionEvent.ACTION_DOWN:
                    if(!isLetterShowing){
                        isLetterShowing = true;
                    }
                    break;
                case MotionEvent.ACTION_SCROLL:
                    if(isLetterShowing){
                        mLetter.setVisibility(View.VISIBLE);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if(isLetterShowing){
                        isLetterShowing = false;
                        mLetter.setVisibility(View.INVISIBLE);
                    }
                    break;
            }
            return false;
        }
    });
 类似资料:
  • 基于网络请求,接受xml,并解析返回的xml,从而得到列车车次信息。 [Code4App.com]

  • 长安汽车到学校宣讲,紧接着第二天就短信通知面试,一面是线下面试,地点就选在学校的教学楼里面,按照分配的面试时间段进行签到,再按照签到的顺序安排面试次序,一个教室里面5个面试官,距离很远,一对一面试,每次进去5个学生,招相应的面试官面试;二面是在一面之后第三天打电话通知的,第四天线上面试。 一面是综合面,先是自我介绍;然后问做项目过程中印象深刻的难点,怎么解决的;然后问职业规划;最后反问面试官一个问

  • 直接发邮件约面! 1、自我介绍。 2、项目没问、技术也没咋问。 3、问我的研究方向,问我毕设做的东西,问我深度学习对他公司的作用。 4、问我了不了解他们公司的情况。 就是那么个情况,真想去的话啥也不用准备,就说我想去就完了! #中车集团##Java开发#

  • 定义 选择车型的组件。 图片展示 代码演示 import SelectCar from 'pile/dist/components/selectcar' <SelectCar show={selectCarShow} brandClick={this.brandClick.bind(this)} carTypeClick={this.carTypeClick.bind(this)}

  • 我有一个问题来写我的代码。这是一个代码,我必须创建一个对象类,并使用另一个类对象运行它。这个程序被称为自行车和自行车测试。我得到了自行车程序(它已经被写好了),我所需要的就是我写自行车测试来利用自行车。现在,问题是,我已经创建了2个对象,称为Nice自行车和酷自行车。我需要将我的NiceBCycle名称更改为“肯尼·麦考密克,但我不能这样做。我一直收到错误消息,说“错误:变量Nice自行车可能没有

  • 电话面,周一上午给我打电话约的周二下午 面试官拷打的挺多的,我还是第一次遇到这么不温柔的面试官 问题一个接着一个的抛 我太菜了给我问蒙了都 对深蓝汽车了解吗 接受工作地点在重庆吗 ==和equals的区别 Integer a=200和Integer b=200用equals比较和用==比较分别是true还是false等等一系列(接连拷打) 迭代器模式,为啥不用for循环 工厂模式和抽象工厂模式 r