ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – Gallery.getChildAt(int position)的问题

2019-06-10 08:10:34  阅读:196  来源: 互联网

标签:android gallery preview effect touch-event


我正在尝试在Gallery视图上创建预览效果并遇到Gallery.getChildAt(int position)的问题,它在大多数时间返回null.它应该仅在未显示子项时返回null,这不是这里的情况,因为用户需要滚动它.有没有办法解决这个问题,还是应该改变我的做法?这是我的代码:

gallery.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent event) {
            if(event.getAction()==MotionEvent.ACTION_UP){
                preview_container.setVisibility(View.GONE);
            }
            else if(event.getDownTime()>2500){
                int position = gallery.pointToPosition((int)event.getX(), (int)event.getY()); 
                if (position!=AdapterView.INVALID_POSITION){
                    View child = gallery.getChildAt(position);
                    if(child!=null){
                        Bitmap tmp_bitmap = book.imageForPreview(position);
                        previewImg.setImageBitmap(tmp_bitmap);
                        FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(tmp_bitmap.getWidth()+2, tmp_bitmap.getHeight()+2,Gravity.NO_GRAVITY);
                        int[] coord = new int[2];
                        child.getLocationOnScreen(coord);
                        int y = MMBookReader.this.getWindowManager().getDefaultDisplay().getHeight()-(tmp_bitmap.getHeight()+view.getHeight());
                        int x = (int) coord[0]-(tmp_bitmap.getWidth()-child.getWidth())/2;
                        layout.leftMargin=x;
                        layout.topMargin=y;
                        preview_container.setVisibility(View.VISIBLE);
                        preview_container.setLayoutParams(layout);
                        previewPageCount.setText(book.getMmpages().get(position).getPosition()+"/"+book.getPages());
                    }
                }
                else
                    preview_container.setVisibility(View.GONE);
            }
            return false;
        }
    });

编辑:我不是要填充Gallery视图,我已经完成了这部分,并且非常了解Adapter类的使用.

编辑2:通过更改行解决:

View child = gallery.getChildAt(position);

用:

View child = gallery.getChildAt( position - gallery.getFirstVisiblePosition() );

解决方法:

您的问题是您假设位置参数getChildAt采用并且适配器中项目的位置相同 – 它们不是.

getChildAt中的位置是孩子在其父ViewGroup中的位置,它与您的适配器位置无关 – 即它从0运行到getChildCount() – 1.

您可以将此与getFirstVisiblePosition()结合使用,它将返回适配器中第一个可见项的位置.第一个可见视图也是其父级中的第一个子视图,因此您为此项目传递给getChildAt的位置将为0.

标签:android,gallery,preview,effect,touch-event
来源: https://codeday.me/bug/20190610/1210856.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有