Android SubsamplingScaleImageView(subsampling-scale-image-view)单双击长按事件【系列2】


附录参考文章1介绍了Android SubsamplingScaleImageView(subsampling-scale-image-view)的简单使用方法。
在处理大图的浏览查看动作过程中,往往还有其他额外的事情需要处理,典型的以微信为例,在微信中,用户可以在消息列表中查看单击/双击放大/缩小消息列表中的图片,但还有一个事件:用户长按图片,弹出对话框,提示用户针对此图片的其他动作如转发。这项功能需要在SubsamplingScaleImageView(subsampling-scale-image-view)给当前的SubsamplingScaleImageView注册一个OnTouchListener事件侦听类,进而用Android的GestureDetector侦听处理有关SubsamplingScaleImageView的单击、双击、长按事件。
在附录文章1的基础上,增加上述‘功能,给出一个小demo。
测试的主Activity MainActivity.java:

package zhangphil.demo;import com.davemorrissey.labs.subscaleview.ImageSource;import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;import android.app.Activity;import android.graphics.PointF;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.Toast;public class MainActivity extends Activity {private SubsamplingScaleImageView mSubsamplingScaleImageView;private GestureDetector gestureDetector;private final String fail_tips = "SubsamplingScaleImageView not ready !!!";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mSubsamplingScaleImageView = (SubsamplingScaleImageView) findViewById(R.id.subsamplingScaleImageView);mSubsamplingScaleImageView.setImage(ImageSource.asset("china.jpg"));gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) {if (mSubsamplingScaleImageView.isReady()) {PointF sCoord = mSubsamplingScaleImageView.viewToSourceCoord(e.getX(), e.getY());Toast.makeText(getApplicationContext(), "单击: " + ((int) sCoord.x) + ", " + ((int) sCoord.y),Toast.LENGTH_SHORT).show();} else {Toast.makeText(getApplicationContext(), fail_tips, Toast.LENGTH_SHORT).show();}return false;}@Overridepublic void onLongPress(MotionEvent e) {if (mSubsamplingScaleImageView.isReady()) {PointF sCoord = mSubsamplingScaleImageView.viewToSourceCoord(e.getX(), e.getY());Toast.makeText(getApplicationContext(), "长按: " + ((int) sCoord.x) + ", " + ((int) sCoord.y),Toast.LENGTH_SHORT).show();} else {Toast.makeText(getApplicationContext(), fail_tips, Toast.LENGTH_SHORT).show();}}@Overridepublic boolean onDoubleTap(MotionEvent e) {if (mSubsamplingScaleImageView.isReady()) {PointF sCoord = mSubsamplingScaleImageView.viewToSourceCoord(e.getX(), e.getY());Toast.makeText(getApplicationContext(), "双击: " + ((int) sCoord.x) + ", " + ((int) sCoord.y),Toast.LENGTH_SHORT).show();} else {Toast.makeText(getApplicationContext(), fail_tips, Toast.LENGTH_SHORT).show();}return false;}});mSubsamplingScaleImageView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {return gestureDetector.onTouchEvent(motionEvent);}});}}


在此简单的说一下Android的事件传导派发流程。在Android的OnTouchListener中,用GestureDetector屏幕事件时候,在个别系统回调函数中的返回值:true,false。通常,
(1)如果返回true,是告知Android事件系统当前事件已经被消费(事件被拦截了),不要再继续传导派发此事件了。
(2)如果返回false,是告知Android事件系统,当前此事件没有被消费(事件没有被拦截,只是监听而已),要求Android系统继续传导派发此事件。
简言之,如果是拦截事件,就返回true;如果只是监听事件,则返回false。
在本例中,虽然我拦截了GestureDetector的onSingleTapConfirmed,onDoubleTap,但返回了false,返回false,是为了继续支持SubsamplingScaleImageView的单击、双击、长按事件。
运行结果如图所示:


附录参考文章:
【文章1】《Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】》链接地址:http://blog.csdn.net/zhangphil/article/details/49557549


更多相关文章

  1. Android(安卓)6.0、7.0 WiFi getScanResults问题
  2. Android(安卓)Touch事件分发过程
  3. Android(安卓)SQLite增删改查的语句
  4. Android(安卓)view 滑动事件冲突解决方法(理论篇)
  5. Android(安卓)右滑关闭当前Activity(类微信)
  6. Android(安卓)- TextView 实现部分文本点击事件
  7. Android调用 .Net Core WebApi 返回数据,用FastJSON解析一直报错
  8. ListView的Item中有CheckBox,导致OnItemClick不响应的解决办法
  9. 【安卓开发学习】6.ListView点击事…

随机推荐

  1. Android配置----小米手机通过wifi连接ADB
  2. Android(安卓)Message源码阅读
  3. Activity的属性
  4. Android(安卓)Studio开发应用
  5. android自动化测试工具简介
  6. Android上下文对象Context
  7. Android(安卓)JNI(实现自己的JNI_OnLoad函
  8. Animations使用 (四)
  9. Android(安卓)Drawable 详解(教你画画!)
  10. android自动化测试工具简介