尝试使用缩放和平移来显示图像

时间:2014-02-19 19:18:24

标签: android android-imageview

我已阅读了大量帖子,并尝试了一些建议的解决方案,但没有太多运气。

我有一个快乐地显示文本视图的ViewPager。

我现在想要增强它以支持ImageViews。图像可能有各种各样的形状和大小,因此我需要让用户能够进行缩放和平移,以便专注于任何区域。

NB。我不一定需要捏缩放,因为我尝试过的捏缩放库(例如。https://github.com/jasonpolites/gesture-imageview/blob/master/main/src/com/polites/android/GestureImageView.javahttp://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/)似乎间歇性地工作,并且因内存不足而崩溃。因此,不要通过手势检测使解决方案复杂化,我很乐意在视图上方放置一个滑块控件来实现缩放UI。

我正在努力找到适当的视图层次结构来实现这一目标(例如,我是否需要ScrollView或在ImageView中平移功能),我应该缩放位图,还是调整大小查看?

对于我需要使用哪些视图组件的任何建议将不胜感激。

我应该使用ImageView吗?我已经看到一些答案表明WebView是一个更好的起点。

我的直觉是,我正在尝试做的事情应该是非常基本的,并且只需要正确的视图层次结构和查看配置设置。要求自定义ImageView类似乎太简单了,但当然我可能错了。

2 个答案:

答案 0 :(得分:1)

我应该使用ImageView吗?我已经看到一些答案表明WebView是一个更好的起点。

这是我最终解决它的方式。我只是将图像文件名包装在一些HTML中并将其提供给webview。

这给了我以下特定的好处: -

  • 详细的用户行为(例如缩放率,捏合灵敏度,屏幕控制的可用性)与浏览器一致,并且对用户的肌肉记忆非常熟悉
  • 我不需要依赖任何第三方代码
  • 由于它是Android的核心,它可能更好地针对边缘情况进行测试(例如,我认为不支持横向的一个库)
  • 我不需要担心使用位图处理的内存不足情况
  • 将来,我可能想要提供“网页”作为我的ViewPager中的一个项目,所以一石二鸟。

这是我最终得到的代码。

File imgFile = new  File(FILESDIR,FILENAME);
if(imgFile.exists()){
  WebView wv = (WebView) rootView.findViewById(R.id.imageView1);
  wv.getSettings().setBuiltInZoomControls(true);
  wv.getSettings().setDisplayZoomControls(true);
  String html = ("<html><img src='"+imgFile.getName()+"'></html>" );
  wv.loadDataWithBaseURL("file://"+imgFile.getAbsolutePath(),
    html,
    "text/html",
    "utf-8",
  "");
} 

答案 1 :(得分:0)

您需要使用GestureDetectors。 Google为此提供了优秀的示例interactiveChart,请参阅https://android.googlesource.com/platform/development/+/master/samples/training/InteractiveCharthttp://developer.android.com/training/gestures/scroll.html