2015-07-24 5 views
0

Итак, я потратил несколько часов на поиск в Интернете, но все форумы и документация не объяснили мне должным образом наилучший способ, которым я должен это разбираться.Масштабирование деятельности

В настоящее время у меня есть активность с относительным расположением XML (фон установлен на изображение карты), и я хотел бы реализовать функцию масштабирования с использованием нескольких жестов. После большого чтения кажется, что я должен использовать ScrollGestureDetector, который должен быть реализован внутри представления.

Я хотел бы сделать так, чтобы пользователь мог использовать два указателя в любом месте экрана, и он увеличится. Проблема в том, что я не знаю, как реализовать это и не могу найти ресурсы, чтобы показать мне как это сделать для активности.

Есть ли способ реализовать ScrollGestureDetector для моего RelativeLayout? Должен ли я создать пользовательское представление, которое охватывает весь экран, и представляет изображение, чтобы я мог реализовать ScrollGestureDetector в определении класса? Как мне это сделать?

+0

Вы можете использовать этот учебник для его реализации: http://www.tutorialspoint.com/android/android_gestures.htm – Bajji

+0

Проблема в том, что у меня уже есть Activity.setOnTouchListener(), настроенный для нескольких разных точек касания , Как я могу объединить эти два решения? Или это так, что мне придется обрабатывать все касания через ScrollGestureDetector? – MichaelAndroidNewbie

ответ

0

Использование масштабирования для масштабирования изображения работает лучше всего, если изображение находится в пределах ImageView. ImageView может масштабировать изображения произвольно, в то время как фоновые изображения масштабируются, основываясь только на границах обзора.

Вам просто нужно позвонить setContentView() о вашей деятельности с макетом, который содержит ImageView.

Чтобы использовать ScaleGestureDetector в коде, вы должны сделать следующее

  1. Объявите ScaleGestureDetector на ваш взгляд.

    private ScaleGestureDetector mScaleGestureDetector; 
    
  2. Инициализировать его с масштабирования слушателя событий, предпочтительнее в onCreate():

    mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.OnScaleGestureListener() { 
        @Override 
        public boolean onScale(ScaleGestureDetector detector) { 
         // your impl here 
         return false; 
        } 
    
        @Override 
        public boolean onScaleBegin(ScaleGestureDetector detector) { 
         // your impl here 
         return false; 
        } 
    
        @Override 
        public void onScaleEnd(ScaleGestureDetector detector) { 
         // your impl here 
        } 
    }) 
    
  3. Добавьте ScaleGestureDetector в ваш метод onTouchEvent():

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    
        mScaleGestureDetector.onTouchEvent(event); 
    
        // do other stuff 
        return super.onTouchEvent(event); 
    } 
    

Как ни странно, ScaleGestureDetector.onTouchEvent()всегда возвращает true, но вы можете использовать isInProgress(), чтобы узнать, запущена ли операция масштабирования.

+0

Есть никоим образом я могу реализовать ScaleGestureDetector внутри моего существующего Activity.setOnTouchListener (новый View.OnTouchListener() { @Override общественного логический onTouch (View v, MotionEvent событие) { // сделать что-то возвращающие } }); – MichaelAndroidNewbie

+0

Да, есть способ. Я только что обновил свой ответ. –

+0

Спасибо. Я смущен тем, что число 2 и 3 реализовано внутри вида или активности. – MichaelAndroidNewbie