我已经坚持这个问题八个小时了,所以我觉得是时候得到一些帮助了.
在我开始我的问题之前,我只会让我知道我已经通过这个网站和谷歌,我找到的答案都没有帮助.(这是一个,另一个,另一个.)
这是交易:我有一个扩展的类SurfaceView(让我们称之为MySurface)并覆盖其中的许多方法.通常情况下,它会绘制几个正方形和文本框,这一切都很好.一旦用户开始触摸,它就会转换为a Bitmap,然后绘制每个帧,直到用户释放.
这就是问题:我想实现这样一种功能:用户可以将两根手指放在屏幕上,捏缩放,也可以平移(但只能用两根手指向下).
我发现了一些缩放到缩放的实现,并通过以下方式将它们改编为我的Canvas对象MySurface:
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.scale(mScaleVector.z, mScaleVector.z); // This is the scale factor as seen below
canvas.translate(mScaleVector.x, mScaleVector.y); // These are offset values from 0,0, both working fine
// Start draw code
// ...
// End draw code
canvas.restore();
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
float factor = detector.getScaleFactor();
if …Run Code Online (Sandbox Code Playgroud) 我喜欢开发一个类似于Swapps的应用程序.我试图在任何屏幕上显示一个按钮,这应该仅在刷卡动作时出现.我尝试使用下面的代码
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type =WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.format =PixelFormat.TRANSLUCENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
parentlay = new LinearLayout(this);
mybt = new Button(getApplicationContext());
bt.setText("Click to Go");
parentlay.setBackgroundColor(Color.TRANSPARENT);
parentlay.setHapticFeedbackEnabled(true);
parentlay.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// event.getAction() prints 4 and not able to get up or down event
}
});
windowmanager.addView(parentlay, params);
Run Code Online (Sandbox Code Playgroud)
当用户通过捕获该事件并从而从左向右滑动时,我试图显示该按钮
parentlay.addView(bt);
Run Code Online (Sandbox Code Playgroud)
用户从右向左滑动时删除视图
parentlay.removeView(bt);
Run Code Online (Sandbox Code Playgroud)
如上所述,除非我将类型更改为TYPE_SYSTEM_ALERT,否则我无法获取运动事件,但是,如果冻结所有屏幕并且无法单击后退或主页按钮,是否有任何其他方法可以执行此操作.
我刚试过以下修改
params.type =WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
|WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.width = …Run Code Online (Sandbox Code Playgroud) 我能够使用原生应用中的SimpleOnGestureListener捕获谷歌眼镜触摸板触发的大部分事件.
使用以下代码,您可以捕获这些事件
MainActivity.java:
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState)
{
gestureDetector = new GestureDetector(this, new MyGestureListener());
}
@Override
public boolean onGenericMotionEvent(MotionEvent event)
{
gestureDetector.onTouchEvent(event);
return true;
}
Run Code Online (Sandbox Code Playgroud)
MyGestureListener:
public class MyGestureListener extends android.view.GestureDetector.SimpleOnGestureListener
{
@Override
public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX, float velocityY)
{
// check for velocity direction to identify swipe forward / backward / up and down
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了两个不同的手势处理源:
但是没有一个我能够捕获swipeDown事件.
回调onFling()仅在"向前滑动","向后滑动"和"向上滑动"时调用,但在"向下滑动"时从不调用.
任何提示或你已经设法抓住了向下滑动?我在这里真的很无能为力.
是什么区别onScroll(),并onFling()在GestureDetector界面?当我打印出事件时,他们会显示完全相同的事情.至少是最后一个onScroll()和onFling().
我注意到的唯一真正的区别是,onScroll()更频繁地调用,总是只有一次.
我想在多点触摸事件上旋转和缩放图像,我能够拖动,缩放图像,但我无法理解图像的旋转.我面临问题所以请尽快帮助我.我的代码在那里
public class Touch extends Activity implements OnTouchListener {
private static final String TAG = "Touch";
// These matrices will be used to move and zoom image
Matrix matrix = new Matrix();
Matrix matrix1 = new Matrix();
Matrix savedMatrix = new Matrix();
Matrix savedMatrix2 = new Matrix();
// We can be in one of these 3 states
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
float …Run Code Online (Sandbox Code Playgroud) 我想实现一个滑动手势来删除ListView类似于android通知的行.
现在我只有一个ListView有onTouchListener-这么说,我已经有刷卡的检测工作.
gestureDetector = new GestureDetector(this, new GestureListener());
onTouchListener = new TouchListener();
listview.setOnTouchListener(onTouchListener);
Run Code Online (Sandbox Code Playgroud)
我的GestureListener班级:
protected class GestureListener extends SimpleOnGestureListener
{
private static final int SWIPE_MIN_DISTANCE = 150;
private static final int SWIPE_MAX_OFF_PATH = 100;
private static final int SWIPE_THRESHOLD_VELOCITY = 100;
private MotionEvent mLastOnDownEvent = null;
@Override
public boolean onDown(MotionEvent e)
{
mLastOnDownEvent = e;
return super.onDown(e);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if(e1 == …Run Code Online (Sandbox Code Playgroud) android android-animation android-gesture android-activity google-photos
我正在测试带有指纹手势的Pixel设备上的可访问性.我试图使用FingerprintGestureController获取手势回调,但即使在我从Settings-> Accessibility打开此应用程序的辅助功能后,也从未获得任何手势.isGestureDetectionAvailable()总是向我返回false.有人可以请帮助.
这是代码:
my_gesture_service.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRequestFingerprintGestures="true" />
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<uses-feature android:name="android.hardware.fingerprint"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
<service
android:name="android.gestures.MyService"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/my_gesture_service" />
</service>
Run Code Online (Sandbox Code Playgroud)
MyService.java
public class MyService extends AccessibilityService {
private static final String TAG = MyService.class.getSimpleName();
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
Log.d(TAG, "onAccessibilityEvent");
}
@Override
public void onInterrupt() {
Log.d(TAG, "onInterrupt");
}
@Override
protected boolean onGesture(int gestureId) {
Log.d(TAG, "onGesture " + gestureId);
return super.onGesture(gestureId);
}
@Override
protected boolean …Run Code Online (Sandbox Code Playgroud) android android-gesture android-accessibility android-fingerprint-api android-8.0-oreo
我有一个Imageview(就像一个杂志页面).当我浏览到那个图像然后我想要下一个图像(页面).也想要放大和缩小此图像的选项.我怎么能实现这一目标?
谢谢
我正在尝试在Android ICS及更高版本中实现"从左向右滑动以删除"手势.我的应用程序中有listview.我有手势探测器工作.但是当我在特定列表项目上从左向右滑动时,我希望项目随着我的手指移动.当我移动手指时,超过某一点,只有这样项目才会自行删除.OnFling()方法I目前还没有实现这一目标.
如何修改OnFling()方法以使项目随我的手指移动?
我的手势听众课是
class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 50;
private static final int SWIPE_MAX_OFF_PATH = 100;
private static final int SWIPE_THRESHOLD_VELOCITY = 25;
private MotionEvent mLastOnDownEvent = null;
@Override
public boolean onDown(MotionEvent e) {
mLastOnDownEvent = e;
return super.onDown(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "On Single TAP up ", Toast.LENGTH_SHORT).show();
return super.onSingleTapUp(e);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) { …Run Code Online (Sandbox Code Playgroud)