Android - Cử chỉ
Android cung cấp các loại sự kiện màn hình cảm ứng đặc biệt như chụm, nhấn đúp, cuộn, nhấn lâu và nhấp nháy. Đây là tất cả được gọi là cử chỉ.
Android cung cấp lớp GestureDetector để nhận các sự kiện chuyển động và cho chúng tôi biết rằng các sự kiện này có tương ứng với cử chỉ hay không. Để sử dụng nó, bạn cần tạo một đối tượng của GestureDetector và sau đó mở rộng một lớp khác vớiGestureDetector.SimpleOnGestureListenerđể hoạt động như một người nghe và ghi đè một số phương thức. Cú pháp của nó được đưa ra dưới đây:
GestureDetector myG;
myG = new GestureDetector(this,new Gesture());
class Gesture extends GestureDetector.SimpleOnGestureListener{
public boolean onSingleTapUp(MotionEvent ev) {
}
public void onLongPress(MotionEvent ev) {
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
}
}
Xử lý cử chỉ véo
Android cung cấp ScaleGestureDetectorlớp để xử lý các cử chỉ như pinch, v.v. Để sử dụng nó, bạn cần khởi tạo một đối tượng của lớp này. Cú pháp của nó như sau:
ScaleGestureDetector SGD;
SGD = new ScaleGestureDetector(this,new ScaleListener());
Tham số đầu tiên là ngữ cảnh và tham số thứ hai là trình nghe sự kiện. Chúng ta phải xác định trình lắng nghe sự kiện và ghi đè một hàmOnTouchEventđể làm cho nó hoạt động. Cú pháp của nó được đưa ra dưới đây:
public boolean onTouchEvent(MotionEvent ev) {
SGD.onTouchEvent(ev);
return true;
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
float scale = detector.getScaleFactor();
return true;
}
}
Ngoài các cử chỉ chụm, còn có các phương pháp khác thông báo thêm về các sự kiện chạm. Chúng được liệt kê dưới đây -
Sr.No | Phương pháp & mô tả |
---|---|
1 | getEventTime() Phương thức này lấy thời gian sự kiện của sự kiện hiện tại đang được xử lý .. |
2 | getFocusX() Phương pháp này lấy tọa độ X của tiêu điểm cử chỉ hiện tại. |
3 | getFocusY() Phương pháp này lấy tọa độ Y của tiêu điểm cử chỉ hiện tại. |
4 | getTimeDelta() Phương thức này trả về chênh lệch thời gian tính bằng mili giây giữa sự kiện chia tỷ lệ được chấp nhận trước đó và sự kiện chia tỷ lệ hiện tại. |
5 | isInProgress() Phương thức này trả về true nếu một cử chỉ tỷ lệ đang diễn ra .. |
6 | onTouchEvent(MotionEvent event) Phương thức này chấp nhận MotionEvents và gửi các sự kiện khi thích hợp. |
Thí dụ
Đây là một ví dụ minh họa việc sử dụng lớp ScaleGestureDetector. Nó tạo ra một ứng dụng cơ bản cho phép bạn phóng to và thu nhỏ thông qua chụm.
Để thử nghiệm với ví dụ này, bạn có thể chạy điều này trên thiết bị thực tế hoặc trong trình giả lập có bật màn hình cảm ứng.
Các bước | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng Android studio để tạo ứng dụng Android theo gói com.example.sairamkrishna.myapplication. |
2 | Sửa đổi tệp src / MainActivity.java để thêm mã cần thiết. |
3 | Sửa đổi res / layout / activity_main để thêm các thành phần XML tương ứng |
4 | Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả |
Sau đây là nội dung của tệp hoạt động chính được sửa đổi src/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView iv;
private Matrix matrix = new Matrix();
private float scale = 1f;
private ScaleGestureDetector SGD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView)findViewById(R.id.imageView);
SGD = new ScaleGestureDetector(this,new ScaleListener());
}
public boolean onTouchEvent(MotionEvent ev) {
SGD.onTouchEvent(ev);
return true;
}
private class ScaleListener extends ScaleGestureDetector.
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
scale *= detector.getScaleFactor();
scale = Math.max(0.1f, Math.min(scale, 5.0f));
matrix.setScale(scale, scale);
iv.setImageMatrix(matrix);
return true;
}
}
}
Sau đây là nội dung sửa đổi của xml res/layout/activity_main.xml.
Ở đây abc chỉ ra logo của điểm hướng dẫn
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView android:text="Gestures
Example" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView"
android:layout_below="@+id/textview"
android:layout_centerHorizontal="true"
android:textColor="#ff7aff24"
android:textSize="35dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/abc"
android:scaleType="matrix"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
Sau đây là nội dung của res/values/string.xml.
<resources>
<string name="app_name>My Application</string>
</resources>
Sau đây là nội dung của AndroidManifest.xml tập tin.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.sairamkrishna.myapplicationMainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Hãy thử chạy ứng dụng của bạn. Tôi giả sử bạn đã kết nối thiết bị di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Bây giờ chỉ cần đặt hai ngón tay trên màn hình android và tách chúng ra một phần và bạn sẽ thấy rằng hình ảnh android đang thu phóng. Nó được hiển thị trong hình ảnh bên dưới -
Bây giờ một lần nữa đặt hai ngón tay lên màn hình android và thử đóng chúng lại và bạn sẽ thấy rằng hình ảnh android hiện đang thu nhỏ lại. Nó được hiển thị trong hình ảnh bên dưới -