Может кто-нибудь сказать мне, как прокручивать растровое изображение двумя пальцами, потому что в моем приложении я использую один палец для рисования. Так как я хочу нарисовать целое изображение (оно может быть больше экрана), прокрутка двумя пальцами будет удобной?
private class Img extends View {
private Bitmap bmp;
private Rect imgRect, scrollRect;
private float prevX, prevY;
private int newX, newY;
public Img(Context context) {
super(context);
bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.screen);
imgRect = new Rect(0, 0, width, height);
scrollRect = new Rect(0, 0, width, height);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: {
int numPointers = event.getPointerCount();
if (numPointers > 1) {
float currX = event.getRawX();
float deltaX = -(currX - prevX);
newX += deltaX;
float currY = event.getRawY();
float deltaY = -(currY - prevY);
newY += deltaY;
if (newX < 0)
newX = 0;
if (newY < 0)
newY = 0;
if (newX > bmp.getWidth() - width)
newX = bmp.getWidth() - width;
if (newY > bmp.getHeight() - height)
newY = bmp.getHeight() - height;
scrollRect.set(newX, newY, newX + width, newY + height);
invalidate();
prevX = currX;
prevY = currY;
}
break;
}
case MotionEvent.ACTION_DOWN: {
prevX = event.getRawX();
prevY = event.getRawY();
break;
}
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bmp, scrollRect, imgRect, new Paint());
}
}
Здесь класс Img представляет вид с большим растровым изображением, в котором отображается его видимый в настоящее время прямоугольник. int numPointers = event.getPointerCount(); if (numPointers > 1) {
int numPointers = event.getPointerCount(); if (numPointers > 1) {
- и здесь вы получаете количество пальцев, которые касаются экрана. Поэтому, если оно больше 1, будет прокручиваться большое изображение, в противном случае вы можете реализовать свою логику рисования.