1. android的双指手势是怎么实现的
android对多点触摸的支持
使用MotionEvent对象方式处理,比如开始触控时会触发ACTION_DOWN而移动操作时为 ACTION_MOVE最终放开手指时触发ACTION_UP事件。当然还有用户无规则的操作可能触发ACTION_CANCEL这个动作。
对于onTouchEvent方法的参数MotionEvent我们可以详细处理来实现对多点触控的了解,
2. uc浏览器安卓版可以设置手势吗
您好,很高兴为您服务!
UC浏览器支持手势功能,单指-左滑退后、右滑前进、上下滑动翻页。
双指-左右滑动切换窗口(多窗口时),上滑关闭当前窗口、下滑新建窗口。
双指-合拢缩小页面,张开放大页面。最新版的浏览器,在菜单-设置-基本设置中可以找到滑屏前进后退的开关哦。现在是有哪一方面的需求呢,是希望能够自定义手势么?
如果仍有问题,请您继续向我们反馈,我们会第一时间为您跟进。
3. 如何在android中实现swipe的手势功能及页面拖动动画
SimpleOnGestureListener. 你只需要实现自己所关心的手势就可以了.
Swipe在android里面是叫Fling ^_^
首先创建自己的一个手势detector类:
private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_MAX_OFF_PATH = 250; private static final int SWIPE_THRESHOLD_VELOCITY = 200;然后在onFling方法中, 判断是不是一个合理的swipe动作: if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); }里的viewFlipper是含有多个view的一个container, 可以很方便的调用prev/next view, 加上animation动画, 可以达到一些不错的效果:
viewFlipper = (ViewFlipper)findViewById(R.id.flipper); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 自定义的animation可以查看具体的XML, 比如从左边进来的一个动画:
4. android手机有哪些手势操作,能具体点吗
android手机有哪些手势操作:
“点击”,也叫“单击”,即轻触屏幕一下。无论是搭载何种操作系统的触控手机,这个都是出现频率最高的动作。点击主要用来打开程序,还有功能表(抽屉)。
“点住”,也叫“长按”、“按住”,按住屏幕超过两秒。此动作通常用来调出“菜单”。某些应用程序在界面空白处长按可以调出菜单;某些条目长按也可以弹出菜单,比如当您需要转发短信时,在短信对话界面长按短信内容,必然会弹出菜单,菜单中通常会有“转发”选项。
在进行文字编辑时,点住文字部分,然后调出光标进行精准定位。
当然,此动作也可用于多选、快捷视图,比如在“图库(相册)”中,默认视图下,长按相册文件夹、可对文件夹进行多选操作;打开相册文件夹后,长按照片,同样可对照片进行多选操作,选择完毕后可进行批量操作(发送、删除)。
“拖动”,准确来说应该叫做“按住并拖动”。“拖动”主屏幕编辑时的常见动作,比如对桌面“小组件”或者“图标”进行位置编辑时。另外也用于进度定位,比如播放音乐或者视频时,需要常常拖动进度条。
“双击”就是短时间内连续双击屏幕两次,主要用于快速缩放,比如浏览图片时双击可以快速放大,再次双击可以复位;浏览网页时,对文章正文部分双击可使文字自适应屏幕,当然某些视频播放器双击可切换至全屏模式。
滑动,也算是一个常见操作。主要用于查看屏幕无法完全显示的页面,功能类似鼠标的滚轮。此操作主要用于查看图片、网页、纯文本(短信、邮件、笔记)。
某些视频播放器还定义了特殊功能,比如亮度调节、快进快退,比如“MX Player”、“VPlayer”。
“缩放”动作,是查看图片、网页时最常见的操作,照相时也可使用缩放手势来进行调焦。在MX Player中,甚至可以将视频画面进行缩放。
5. Android中如何让手势和滚动视图滑动方向一致
概述介绍
app在滑动视图列表的时候会动态的将ActionBar(Toolbar)隐藏(向下滑动显示,向上滑动隐藏),以留下更多的空间来显示内容。
视图布局
原理:采用自定义Toolbar和ListView来实现;
具体操作
采用自定义Toolbar所以得更改默认布局,使用不带ActionBar的主题。
其他要素
基本成型的布局了,代码中没有什么注释,看代码的速度要远胜于看注释速度。由于代码都是常用的,写大量的注释反而感觉很多余。
获取到手势滑动的方向和距离,以此来判断是上滑还是下滑。
上滑:将Toolbar隐藏,下滑:将Toolbar显示。
6. android 自定义相机拍照界面 手势设置焦距问题
这个拍照界面是每个厂家的ROM都不一样的,如果你喜欢小米的拍照界面,你可以把手机系统刷成小米ROM,不能刷的话,你也可以通过第三方APP解决,比如美图秀秀,360拍照都有手势设置焦距的功能。
7. 使用安卓系统的手机怎么设置手势锁屏
安卓手机设置锁屏密码的方法:
注意:各台设备上的 Android 系统不尽相同。这些说明仅适用于运行 Android 7.0 及以上版本的设备。查看 Android 系统版本参考设置。
1、打开设备的“设置”应用
2、在“个人”下方,点按安全。
3、要更改屏幕锁定设置,请点按“屏幕锁定”旁边的“设置”。具体设置包括自动锁定前的等待时间、电源按钮锁定和锁定屏幕消息。
4、要选择一种屏幕锁定方式,请点按屏幕锁定方式。
如果已设置锁定方式,则必须先输入 PIN 码、密码或绘制解锁图案,然后才能选择其他锁定选项。
点按想要使用的屏幕锁定选项,然后按照屏幕上的说明操作。
注意:“密码”方式会要求至少输入 4 个字母或数字。只要您能设置一个安全系数高的密码,这就是最安全的选项。
8. android手势识别,自定义View,滑动后长按无效,这个问题怎么处理啊
你的意思是处于滑动状态中停留2秒作为长按么?要知道,长按和滑动是互斥的,若按下后滑动,则会取消掉判断长按的。
9. Android 自定义ImageView添加手势后,移动或缩放怎么判断越界的问题
初始化的时候已经进行了缩放
Java code
//第一个图片
float scaleX = w / leftImage.getWidth();
float scaleY = h / leftImage.getHeight();
leftMinScale = scaleX > scaleY ? scaleX : scaleY;
leftMatrix.setScale(leftMinScale, leftMinScale);
10. android怎样可以控制手势滑动的
我们先来明确一些概念,首先,Android的事件处理机制是基于Listener(监听器)来实现的,比我们今天所说的触摸屏相关的事件,就是通 过onTouchListener。其次,所有View的子类都可以通过setOnTouchListener()、 setOnKeyListener()等方法来添加对某一类事件的监听器。第三,Listener一般会以Interface(接口)的方式来提供,其中 包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。这样,当我们给某个view设 置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callbakc函数给予适 当的响应。
看一个简单的例子,就用最简单的TextView来说明(事实上和ADT中生成的skeleton没有什么区别)。
Java代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// init TextView
TextView tv = (TextView) findViewById(R.id.page);
// set OnTouchListener on TextView
tv.setOnTouchListener(this);
// show some text
tv.setText(R.string.text);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(this, "onTouch", Toast.LENGTH_SHORT).show();
return false;
}
我们给TextView的实例tv设定了一个onTouchListener,因为GestureTest类实现了OnTouchListener 接口,所以简单的给一个this作为参数即可。onTouch方法则是实现了OnTouchListener中的抽象方法,我们只要在这里添加逻辑代码即 可在用户触摸屏幕时做出响应,就像我们这里所做的——打出一个提示信息。
这里,我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。ACTION_DOWN是指按下触摸屏,ACTION_MOVE是指按下触摸屏后移动受力点,ACTION_UP则是指松 开触摸屏,ACTION_CANCEL不会由用户直接触发(所以不在今天的讨论范围,请参考ViewGroup.onInterceptTouchEvent(MotionEvent))。借助对于用户不同操作的判断,结合getRawX()、getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。待机可以看看MotionEvent类的文档,另外也可以看考TouchPaint例子。
回到今天所要说的重点,当我们捕捉到Touch操作的时候,如何识别出用户的Gesture?这里我们需要GestureDetector.OnGestureListener接口的帮助,于是我们的GestureTest类就变成了这个样子。
Java代码
public class GestureTest extends Activity implements OnTouchListener,
OnGestureListener {
....
}
随后,在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给 GestureDetector 来分析是否有合适的callback函数来处理用户的手势。
Java代码
@Override
public boolean onTouch(View v, MotionEvent event) {
// OnGestureListener will analyzes the given motion event
return mGestureDetector.onTouchEvent(event);
}
接下来,我们实现了以下6个抽象方法,其中最有用的当然是onFling()、onScroll()和onLongPress()了。我已经把每一个方法代表的手势的意思写在了注释里,大家看一下就明白了。
// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发Java代码
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show();
return false;
}
// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return false;
}
// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// TODO Auto-generated method stub
return false;
}
我们来试着做一个onFling()事件的处理吧,onFling()方法中每一个参数的意义我写在注释中了,需要注意的是Fling事件的处理代 码中,除了第一个触发Fling的ACTION_DOWN和最后一个ACTION_MOVE中包含的坐标等信息外,我们还可以根据用户在X轴或者Y轴上的 移动速度作为条件。比如下面的代码中我们就在用户移动超过100个像素,且X轴上每秒的移动速度大于200像素时才进行处理。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
// 触发条件 :
// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling left
Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
} else
if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling right
Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show();
}
return false;
}
问题是,这个时候如果我们尝试去运行程序,你会发现我们根本得不到想要的结果,跟踪代码的执行的会发现onFling()事件一直就没有被捕捉到。这正是一开始困扰我的问题,这到底是为什么呢?
我在讨论组的Gesture detection这个帖子里找到了答案,即我们需要在onCreate中tv.setOnTouchListener(this);之后添加如下一句代码。
tv.setLongClickable(true);
只有这样,view才能够处理不同于Tap(轻触)的hold(即ACTION_MOVE,或者多个ACTION_DOWN),我们同样可以通过layout定义中的android:longClickable来做到这一点。
这次遇到的这个问题和上次MapView中setOnKeyListener遇到的问题挺类似,其实都是对SDK的了解不够全面,遇到了一次记住了就好。不过话说回来,Google在文档方面确实需要加强了,起码可以在OnGestureListener中说明需要满足那些条件才可以保证手势被正确识别。