您的位置 首页 IOT

android手势操作滑动作用触摸屏事情处理

很多时候,利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在 浏览器中滚屏,用Fling在阅读器

许多时分,使用接触屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体会大大提高,比如用Scroll手势在 浏览器中滚屏,用Fling在阅读器中翻页等。在Android体系中,手势的辨认是经过 .OnGestureListener接口来完结的,不过William翻遍了Android的官方文档也没有找到一个相 关的比如,API Demo中的TouchPaint也仅仅是说到了onTouch事情的处理,没有涉及到手势。Android Developer评论组里也有不少人有和我相似的问题,结合他们说到的办法和我所做的试验,我将给咱们简略叙述一下Android中手势辨认的完结。

咱们先来清晰一些概念,首要,Android的事情处理机制是根据Listener(监听器)来完结的,比咱们今日所说的接触屏相关的事情,便是通 过onTouchListener。其次,一切View的子类都能够经过setOnTouchListener()、 setOnKeyListener()等办法来增加对某一类事情的监听器。第三,Listener一般会以Interface(接口)的办法来供给,其间 包含一个或多个abstract(笼统)办法,咱们需求完结这些办法来完结onTouch()、onKey()等等的操作。这样,当咱们给某个view设 置了事情Listener,并完结了其间的笼统办法今后,程序便能够在特定的事情被dispatch到该view的时分,经过callbakc函数给予适 当的呼应。

看一个简略的比如,就用最简略的TextView来阐明(事实上和ADT中生成的skeleton没有什么差异)。

Java代码

view plain copy to clipboard print ?

public class GestureTest extends Activity implements OnTouchListener{

@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代码

view plain copy to clipboard print ?

public class GestureTest extends Activity implements OnTouchListener,

OnGestureListener {

….

}

随后,在onTouch()办法中,咱们调用GestureDetector的onTouchEvent()办法,将捕捉到的MotionEvent交给 GestureDetector 来剖析是否有适宜的callback函数来处理用户的手势。

Java代码

view plain copy to clipboard print ?

@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代码

view plain copy to clipboard print ?

@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触发

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/298253.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部