English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Метод реализации скролла большого изображения в Android

Этот пример рассказывает о методе реализации большой картинки с скроллингом в Android. Делимся с вами для вашего参考, подробности см. ниже:

Вопрос:

У меня есть изображение большого размера, например, длина и ширина в два раза больше экрана, функция, которую я хочу реализовать, это в первую очередь выровнять изображение по центру, поскольку изображение слишком большое, очевидно, можно показать только часть, а затем можно реализовать平滑滚动 (с滚动的 обновлением без видимых следов обновления).

Как и в google карте, если использовать контрол mapView, то можно перемещать весь карту на экране, но из-за большого объема информации на карте, если слишком быстро перемещать, экран временно покажет некоторые следы обновления (серые и белые клетки).

Хотел использовать mapView для загрузки существующего изображения, но не удалось, затем также использовал控件 ScrollView и наиболее используемый imageView, но все равно не удалось.

Решение:

После большого количества поиска информации, использование imageView вместе с событием onTouch, может решить проблему.

Ключевые коды:

У контроле imageView в файле макета так

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/img"
  android:scaleType="center"
  android:background="#fff"
  android:src="@drawable/picName"
/>

Основной код в файле Activity следующий

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.xml_name_layout);
  final ImageView switcherView = (ImageView) this.findViewById(R.id.img);
  switcherView.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View arg0, MotionEvent event) {
      float curX, curY;
      switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
          mx = event.getX();
          my = event.getY();
          break;
        case MotionEvent.ACTION_MOVE:
          curX = event.getX();
          curY = event.getY();
          switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
          mx = curX;
          my = curY;
          break;
        case MotionEvent.ACTION_UP:
          curX = event.getX();
          curY = event.getY();
          switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
          break;
      {}
      return true;
    {}
  });
{}

Реализованный эффект показан следующим образом:

Оригинальное изображение:

Эффект в симуляторе:

Читатели, интересующиеся дополнительной информацией по теме Android, могут просмотреть专题 статьи на нашем сайте: «Суммарные советы по обработке графики и изображений в Android», «Введение и продвинутый курс по разработке Android», «Сборник советов по отладке и решению распространенных проблем в Android», «Сборник советов по работе с多媒体 в Android (аудио, видео, запись и т.д.)», «Суммарные советы по использованию основных компонентов в Android», «Суммарные советы по использованию View в Android», «Суммарные советы по использованию layout в Android» и «Суммарные советы по использованию контроллеров в Android»

Надеюсь, что изложенное в этой статье поможет вам в разработке Android-приложений.

Заявление: Контент статьи предоставлен из Интернета, авторские права принадлежат их законным владельцам, материал предоставлен пользователями Интернета, веб-сайт не имеет права собственности, материал не был отредактирован вручную, и не несет ответственности за него. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. В случае подтверждения нарушения, сайт немедленно удаляет涉嫌侵权的内容.

Основной учебник
Давай подумаем