No products in the cart.
Nếu chưa biết thì khó khăn nhưng khi biết rồi chúng ta thực hiện nó một cách rất đơn giản.
Để phóng to thu nhỏ 1 cái View hay ImageView (bản chất nó cũng là View) thì cần sử dụng một đối tượng của lớp ScaleGestureDetector đặt tại Library/Android/sdk/platforms/android-28/android.jar!/android/view/ScaleGestureDetector.java đường dẫn này sẽ thay đổi tuỳ thuộc vào bộ SDK (là cái compileSdkVersion) mà bạn đang dùng là gì.
Lớp này có 1 interface là OnScaleGestureListener và 1 lớp SimpleOnScaleGestureListener đã implement cái interface OnScaleGestureListener này sẵn rồi.
Vậy vấn đề là bạn cần hiểu khi View hay Activity của bạn cần chức năng zoom thì bắt buộc phải:
1. là implement interface OnScaleGestureListener
2. là phải kế thừa lớp SimpleOnScaleGestureListener
Cả 2 cách đều giống nhau và khác nhau duy nhất là tính chất của interface và class. Nếu bạn dùng interface thì phải override hết các method còn dùng extend thì chỉ cần override hàm mà bạn cần.
Có 3 hàm sau:
public boolean onScale – chỉ cần hàm này cũng phóng to thu nhỏ được.
public boolean onScaleBegin
public void onScaleEnd
Lý thuyết là thế, bây giờ đến thực hành:
Tạo một đối tượng xử lý nghe sự kiện scale trên màn hình
private float mScaleFactor = 1.0f;
private ScaleGestureDetector.SimpleOnScaleGestureListener onScaleGestureListener = new ScaleGestureDetector.SimpleOnScaleGestureListener() {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(0.5f, Math.min(mScaleFactor, 2.5f));
wrapper1.setScaleX(mScaleFactor);
wrapper1.setScaleY(mScaleFactor);
return true;
}
};
cái wrapper1 là cái sẽ được phóng to thu nhỏ. 0.5f là thu nhỏ nhất có thể và 2.5f là phóng to nhất có thể.
Tạo đối tượng mScaleGestureDetector của lớp ScaleGestureDetector
private ScaleGestureDetector mScaleGestureDetector = new ScaleGestureDetector(wrapper1.getContext(), onScaleGestureListener);
Gọi hàm onTouchEvent của lớp scale
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleGestureDetector.onTouchEvent(event);
return true;
}
Ok vậy là xong, bạn tạo project nhỏ và thử cái này xem sao. Có thắc hãy để lại comment bên dưới.
Bạn có thể đọc thêm bài này cũng khá tổng quát: https://en.proft.me/2017/06/25/detecting-gestures-android-gesturedetector/
Các bài viết không xem thì tiếc:
- Lập trình phóng to thu nhỏ ảnh pinch in – pinch out trong Android
- Cách dùng Eventbus để truyền dữ liệu trong Android
- Truyền dữ liệu giữa 2 fragment trong android
- Lập trình với Recyclerview trong Android – Bài 2 | dotrinh.com
- Lập trình với Recyclerview trong Android – Bài 3 | dotrinh.com
- Chuyển một đối tượng sang Json trong Android
- Cách dùng AsyncTask trong Android
- Làm việc với font trong Android
- Lập trình với Recyclerview trong Android – Bài 1 | dotrinh.com
- Gửi dữ liệu đến BLESerial3 bằng Bluetooth LE Android
- Tạo seekbar và kiến thức hữu ích về seekbar trong Android
- Hiểu về cách tổ chức file, bộ nhớ của app Android
- Show Indicator trong Android | Hiển thị indicator trong Android
- Ý nghĩa của clipToPadding trong Android
- Truyền dữ liệu giữa các Activity trong android