歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 實現大圖的滾動顯示

Android 實現大圖的滾動顯示

日期:2017/3/1 10:24:01   编辑:Linux編程

問題:

我有一張比較大的圖片,比如長寬都是屏幕的兩倍大小,我想實現的功能是首先將圖片居中顯示,由於圖片太大顯然只能顯示一部分,然後可以通過拖動,實現圖片的平滑滾動(既看不出來滾動刷新痕跡)。

就像google地圖一樣,如果用mapView這個控件,那麼可以在屏幕上拖動整個地圖,但是由於地圖信息量太大,如果一次拖動過快,那麼屏幕會暫時顯示出一些刷新痕跡(灰白的格子)。

想使用mapView來加載已有圖片,但是沒有成功,後來也使用了Srollview控件,和最常用的imageView,還是沒有成功。

解決:

經過大量查資料,使用imageView配合onTouch事件,可以解決。

關鍵代碼:

布局文件中imageView控件如下

  1. <ImageView
  2. Android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:id="@+id/img"
  5. android:scaleType="center"
  6. android:background="#fff"
  7. android:src="@drawable/picName"
  8. />

Activity文件中主要代碼如下

  1. @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.xml_name_layout);
  5. final ImageView switcherView = (ImageView) this.findViewById(R.id.img);
  6. switcherView.setOnTouchListener(new View.OnTouchListener() {
  7. public boolean onTouch(View arg0, MotionEvent event) {
  8. float curX, curY;
  9. switch (event.getAction()) {
  10. case MotionEvent.ACTION_DOWN:
  11. mx = event.getX();
  12. my = event.getY();
  13. break;
  14. case MotionEvent.ACTION_MOVE:
  15. curX = event.getX();
  16. curY = event.getY();
  17. switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
  18. mx = curX;
  19. my = curY;
  20. break;
  21. case MotionEvent.ACTION_UP:
  22. curX = event.getX();
  23. curY = event.getY();
  24. switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
  25. break;
  26. }
  27. return true;
  28. }
  29. });
  30. }

實現效果如下:

原圖

模擬器裡效果

Copyright © Linux教程網 All Rights Reserved