私はアプリケーションの種類を開発しようとしています。私は、アイコンを描画するためにアダプタとグリッドビューを使用します。私はdrap &ドロップを実装したいので、他の要素でうまく動作するontouchlistenerを書きましたが、グリッドビューのアイコンに問題があります。GridView要素のOnTouchListener
アイコンを長押しすると、水平にドラッグしますが、モーションイベントがMotionEvent.ACTION_CANCELに与えるよりも垂直方向のピクセルの場合のみ、ドラッグが停止し、gridviewがスクロールし始めます。 どうすればそれを避けることができますか?私はグリッドビューをスクロール不能にするためにgridview.setEnable(false)を試しましたが、ドラッグは以前と同じように停止します。
誰かが私を助けてくれますか?それはあなたがすべてのMotionEvent.ACTION_DOWNまたはMotionEvent.ACTION_MOVE時のビューの親にrequestDisallowInterceptTouchEvent()を呼び出すようにしてください...
@Override
public boolean onTouch(View view, MotionEvent me) {
int action = me.getAction();
switch(action){
case MotionEvent.ACTION_DOWN:
status = START_DRAGGING;
params = new RelativeLayout.LayoutParams(dim,dim);
params.leftMargin=(int) me.getRawX()-60;
params.topMargin= (int) me.getRawY()-90;
parenty=bglayout.getHeight();
view.setDrawingCacheEnabled(true);
image.setImageBitmap(view.getDrawingCache());
bglayout.addView(image, params);
grview.setOnItemSelectedListener(null);
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
status = STOP_DRAGGING;
Log.v("Drag", "Stopped Dragging");
bglayout.removeView(image);
break;
case MotionEvent.ACTION_MOVE:
if (status == START_DRAGGING) {
System.out.println("Dragging");
params = new RelativeLayout.LayoutParams(dim,dim);
params.leftMargin= (int) Math.min(me.getRawX()-dim/2, bglayout.getWidth()-dim) ;
params.topMargin= (int) Math.min(me.getRawY()-dim/2, bglayout.getHeight()-dim) ;
Log.v("DRAG", params.leftMargin + " " + params.topMargin);
image.setLayoutParams(params);
image.invalidate();
}
}
return false;
}