Как прокрутить растровое изображение двумя пальцами?

1

Может кто-нибудь сказать мне, как прокручивать растровое изображение двумя пальцами, потому что в моем приложении я использую один палец для рисования. Так как я хочу нарисовать целое изображение (оно может быть больше экрана), прокрутка двумя пальцами будет удобной?

Теги:
bitmap

1 ответ

3
Лучший ответ
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, будет прокручиваться большое изображение, в противном случае вы можете реализовать свою логику рисования.

  • 0
    как проверить на эмуляторе.
  • 0
    Насколько я знаю, эмулятор не поддерживает мультитач.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню