今までの指をスライド中は範囲外の空白が出ても画像が付いて回るものから、画像の端になったらスライドせずに止まるものを考えた。
float mTouchX, mTouchY;
boolean mImageScrollFlag = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch ( event.getActionMasked() ) {
case MotionEvent.ACTION_DOWN:
mTouchX = event.getX();
mTouchY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
mImageScrollFlag = true;
float x = event.getX();
float y = event.getY();
scrollImage( imageView1, (mTouchX-x), (mTouchY-y) );
mTouchX = x;
mTouchY = y;
return true;
case MotionEvent.ACTION_UP:
if ( mImageScrollFlag ) {
mImageScrollFlag = false;
return true;
}
break;
}
return super.onTouchEvent(event);
}
private void scrollImage ( MyImageView view, float x, float y ) {
int cX = (int) x;
int cY = (int) y;
int sw = getScreenWidth();
int sh = getScreenHeight();
int iw = view.getImageWidth();
int ih = view.getImageHeight();
int scrX = view.getScrollX();
int scrY = view.getScrollY();
int dx = ( iw - sw );
int dy = ( ih - sh );
if ( dx > 0 ) {
if ( x > 0 ) {
if ( scrX == dx ) cX = 0;
else {
int xx = dx - scrX;
if ( x >= xx ) cX = xx;
}
} else if ( x < 0 ){
if ( scrX == 0 ) cX = 0;
else if ( scrX > 0 && -scrX >= x ) cX = -scrX;
} else cX = 0;
} else
cX = 0;
if ( dy > 0 ) {
if ( y > 0 ) {
if ( scrY == dy ) cY = 0;
else {
int yy = dy - scrY;
if ( y >= yy ) cY = yy;
}
} else if ( y < 0 ){
if ( scrY == 0 ) cY = 0;
else if ( scrY > 0 && -scrY >= y ) cY = -scrY;
} else cY = 0;
} else
cY = 0;
view.scrollBy( cX, cY );
}