Жесты - один из важнейших способов ввода в Android устройствах. Существует несколько категорий жестов, основные из которых это SingleTouch и Multitouch.
Одной из желанных "плюшек" в приложении, так или иначе связанным с изображениями является их масштабирование.
Под масштабированием будем понимать жесты трансформирующие наше View, и использующие более одного касания (мультитач).
Основой для приложения будет класс ScaleGestureDetector, основной задачей которого является "узнавание" жестов масштабирования, и уведомления приложения с помощью CallBack'ов. При его использовании необходимо учитывать, что данная возможность доступна с версии Android 2.0 (Froyo).
Начнем с создания собственного ImageView.
Его код предельно прост:
Одной из желанных "плюшек" в приложении, так или иначе связанным с изображениями является их масштабирование.
Под масштабированием будем понимать жесты трансформирующие наше View, и использующие более одного касания (мультитач).
Основой для приложения будет класс ScaleGestureDetector, основной задачей которого является "узнавание" жестов масштабирования, и уведомления приложения с помощью CallBack'ов. При его использовании необходимо учитывать, что данная возможность доступна с версии Android 2.0 (Froyo).
Начнем с создания собственного ImageView.
Его код предельно прост:
package com.malice.scale; import android.content.Context; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View; public class MyImageView extends View { private Drawable image; private float scaleFactor = 1.0f; private ScaleGestureDetector scaleGestureDetector; public MyImageView(Context context) { super(context); image = context.getResources().getDrawable(R.drawable.ic_launcher); setFocusable(true); image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); scaleGestureDetector = new ScaleGestureDetector(context, new ScaleListener()); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); canvas.scale(scaleFactor, scaleFactor); image.draw(canvas); canvas.restore(); } @Override public boolean onTouchEvent(MotionEvent event) { scaleGestureDetector.onTouchEvent(event); invalidate(); return true; } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { scaleFactor *= detector.getScaleFactor(); scaleFactor = Math.max(0.1f, Math.min(scaleFactor, 5.0f)); invalidate(); return true; } } }
Задача данного класса - формирование View на экране пользователя, и отрисовка Image на Canvas данной View. Одновременно с этим, мы создаем объект класса ScaleGestureDetector и определяем для него CallBack вызов.
При возникновении события мы перерисовываем Canvas согласно текущему коэффициенту масштабирования.
Для того, чтобы увидеть результат изменим код главной Activity:
При возникновении события мы перерисовываем Canvas согласно текущему коэффициенту масштабирования.
Для того, чтобы увидеть результат изменим код главной Activity:
package com.malice.scale; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyImageView(this)); } }
Пример готов к использованию :)
Комментариев нет:
Отправить комментарий