GestureDetector检测GridView项目上的DoubleClick

时间:2016-08-23 11:59:30

标签: java android gridview imageview gesture

注意:此特定问题已解决,但存在严重的后续问题。看看GestureDetector - Detect double click in GridView item's although returning false in onTouchEvent()

我想检测GridView张图片中不同商品的双击。 因此,我在适配器的OnTouchListener方法中为每个项目imageView分配了一个单独的getView()gestureDetector是适配器类的成员变量。

private GestureDetectorCompat gestureDetector;

public ImageGridViewAdapter(Context c, ArrayList<UriWrapper> startUpImages)     {
    mContext = c;
    uriManager  = new UriManager(startUpImages);
    gestureDetector = new GestureDetectorCompat(mContext, new SingleTapConfirm());
}

public View getView(final int position, View recycled, ViewGroup parent) {

    ViewHolder holder;
    if (recycled == null) {
       ..... find items by id
    } else{
        holder = (ViewHolder) recycled.getTag();
    }

    // Set listener to item image
    holder.image.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // Always returns false, the gestureDetector does not detect anything
            boolean ret = gestureDetector.onTouchEvent(event);
            // At least the onTouch-callback gets called with the correct position
            Log.e(TAG, "onTouch returned " + ret + " at position " + position);
            return true;
        }
    });

    // Use glide library to load images into the image views
    Glide.with(mContext)....into(holder.image);
    return recycled;
}

私有类SingleTapConfirm扩展了GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onSingleTapConfirmed(MotionEvent event) {
        Log.e(TAG, "onSingleTapConfirmed"); // never called..
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        Log.e(TAG, "onDoubleTap"); // never called..
        return super.onDoubleTap(e);
    }
}

OnTouchListener的工作,并以正确的位置进行调用。 但是,无论我在做什么,都不会调用GestureDetector的方法。这段代码似乎有什么问题?

更新:onTouch-callback需要返回true,现在至少GestureDetector工作。但是,返回true会破坏其余的功能,因为我的GridView具有长按选择模式和全局OnTouchListener。

第二次更新: 合并特定于项目的OnTouchListener和全局OnTouchListener无法正常工作。 (仅在某些项目上识别滑动手势) 我希望我可以通过创建自定义View扩展ImageView并在那里分配特定于项目的OnTouchListener来解决这两个问题。

1 个答案:

答案 0 :(得分:1)

        @Override
        public boolean onTouch(View v, MotionEvent event) {anything
            gestureDetector.onTouchEvent(event);
            return true;
        }

<强>更新

<form  class="nobottommargin" *ngIf="details"   [formGroup]="form"  (ngSubmit)="onSubmit(form.value)" name="template-contactform">
<div class="col-sm-12 nopadding socialaddress">
    <div class="col-sm-12 formpaddingcss">
       <h3 class = "headingfontcss">SOCIAL ADDRESS</h3>
     </div>  
                </div>   
                <div class="input-group divcenter">
                    <input type="email" tooltip="Enter Facebook url" [tooltipDisabled]="false" [tooltipAnimation]="true"
                    tooltipPlacement="top" name="widget-subscribe-form-email" [formControl]="form.controls['facebook']" [(ngModel)]="details.facebook"  class="form-control required email formcontrolheight" placeholder="Facebook" aria-required="true">
                </div>
            </div>
</form>