它使我朝着需要的方向前进。这是我的修改版本,可停止在图像边缘滚动...

// set maximum scroll amount (based on center of image)

int maxX = (int)((bitmapWidth / 2) - (screenWidth / 2));

int maxY = (int)((bitmapHeight / 2) - (screenHeight / 2));

// set scroll limits

final int maxLeft = (maxX * -1);

final int maxRight = maxX;

final int maxTop = (maxY * -1);

final int maxBottom = maxY;

// set touchlistener

ImageView_BitmapView.setOnTouchListener(new View.OnTouchListener()

{

float downX, downY;

int totalX, totalY;

int scrollByX, scrollByY;

public boolean onTouch(View view, MotionEvent event)

{

float currentX, currentY;

switch (event.getAction())

{

case MotionEvent.ACTION_DOWN:

downX = event.getX();

downY = event.getY();

break;

case MotionEvent.ACTION_MOVE:

currentX = event.getX();

currentY = event.getY();

scrollByX = (int)(downX - currentX);

scrollByY = (int)(downY - currentY);

// scrolling to left side of image (pic moving to the right)

if (currentX > downX)

{

if (totalX == maxLeft)

{

scrollByX = 0;

}

if (totalX > maxLeft)

{

totalX = totalX + scrollByX;

}

if (totalX < maxLeft)

{

scrollByX = maxLeft - (totalX - scrollByX);

totalX = maxLeft;

}

}

// scrolling to right side of image (pic moving to the left)

if (currentX < downX)

{

if (totalX == maxRight)

{

scrollByX = 0;

}

if (totalX < maxRight)

{

totalX = totalX + scrollByX;

}

if (totalX > maxRight)

{

scrollByX = maxRight - (totalX - scrollByX);

totalX = maxRight;

}

}

// scrolling to top of image (pic moving to the bottom)

if (currentY > downY)

{

if (totalY == maxTop)

{

scrollByY = 0;

}

if (totalY > maxTop)

{

totalY = totalY + scrollByY;

}

if (totalY < maxTop)

{

scrollByY = maxTop - (totalY - scrollByY);

totalY = maxTop;

}

}

// scrolling to bottom of image (pic moving to the top)

if (currentY < downY)

{

if (totalY == maxBottom)

{

scrollByY = 0;

}

if (totalY < maxBottom)

{

totalY = totalY + scrollByY;

}

if (totalY > maxBottom)

{

scrollByY = maxBottom - (totalY - scrollByY);

totalY = maxBottom;

}

}

ImageView_BitmapView.scrollBy(scrollByX, scrollByY);

downX = currentX;

downY = currentY;

break;

}

return true;

}

});

我敢肯定它可以改进一点,但是效果很好。:)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐