サイズとタッチポイントを参照してドラッグ可能なビューに制限を追加すると、問題が解決しました。
だから私がする必要があるのは、境界線と比較してタッチポイントをframelayout
取得することです。シナリオによっては、ドラッグ可能なビューに制限を設定します。
コードは、これらが私にとって完璧に機能したようなものです::
public boolean onTouch(View paramView, MotionEvent event)
{
ImageView view = (ImageView)paramView;
switch (event.getAction() & MotionEvent.ACTION_MASK)
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
/*
* Restricting Image not to be draggable outside of FrameLayout
*/
matrix.set(savedMatrix); //Top
if(event.getY()==0)
{
matrix.postTranslate(event.getX()+15-start.x, 0+15);
Log.d("Top", "Top...");
}
else if(event.getX()==0) //Left
{
matrix.postTranslate(0+15, event.getY()-start.y+15);
Log.d("LEFT", "Left...");
}
else if((event.getY()-ImageHeight)>fm.getHeight()) //Bottom
{
matrix.postTranslate(event.getX()-start.x+15, fm.getHeight()-ImageHeight+15);
Log.d("BOTTOM", "Bottom...");
}
else if((event.getX()-ImageWidth)>fm.getWidth()) //Right
{
matrix.postTranslate(fm.getWidth()-ImageWidth+15, event.getY()-start.y+15);
Log.d("RIGHT", "Right....");
}
else if(event.getY()==0 && (event.getX()-ImageWidth)>fm.getWidth()) //Top -Right
{
matrix.postTranslate(fm.getWidth()-ImageWidth-15, 15);
}
else if(event.getY()==0 &&event.getX()==0) //Top-Left
{
matrix.postTranslate(15, 15);
}
else if((event.getY()-ImageHeight)>fm.getHeight() && event.getX()==0) //Bottom-Left
{
matrix.postTranslate(15, fm.getHeight()-ImageHeight-15);
}
else if((event.getX()-ImageWidth)>fm.getWidth() && (event.getY()-ImageHeight)>fm.getHeight())
{
matrix.postTranslate(fm.getWidth()-ImageWidth-15, fm.getHeight()-ImageHeight-15);
}
else
{
matrix.postTranslate(event.getX() - start.x, event.getY() - start.y);
Log.d("ACTION_MOVE", "Starting Point::"+start.x+","+start.y+" Ending Point::"+event.getX()+","+event.getY());
Log.d("ACTION_DOWN", "FrameLayout::"+fm.getWidth()+" ,"+fm.getHeight()+" ImageView:: "+view.getWidth()+", "+view.getHeight());
}
}
else if (mode == ZOOM) {
float newDist = spacing(event);
Log.d(TAG, "newDist=" + newDist);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
view.setImageMatrix(matrix);
return true;
}