Как реализовать эффект масштабирования для просмотра изображений в Android? - PullRequest
53 голосов
/ 06 декабря 2011

Я должен реализовать масштабирование изображения, я пробовал с таким количеством кодов. Но я не получил полное представление о событиях жестов.Я хочу реализовать, когда мы применяем двойное касание, изображение будет масштабироваться в соответствии с местом касания (события x и y). Мне нужно реализовать только масштабирование в это время без панорамирования. Может ли кто-нибудь предложить мне тело?

Редактировать: На самом деле я реализовал этот видоискатель с изображениями, если я пытаюсь применить эффект панорамирования и масштабирования, иногда изображения будут изменены. Я хочу реализовать эффект масштабирования для того места, где пользователь щелкнул .

Дайте мне некоторое представление об этом ...

Ответы [ 9 ]

58 голосов
/ 14 августа 2013

Ленивец может использовать эту библиотеку , просто импортируйте ее в свой проект и

ImageView mImageView;
PhotoViewAttacher mAttacher;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Any implementation of ImageView can be used!
    mImageView = (ImageView) findViewById(R.id.iv_photo);

    // Set the Drawable displayed
    Drawable bitmap = getResources().getDrawable(R.drawable.wallpaper);
    mImageView.setImageDrawable(bitmap);

    // Attach a PhotoViewAttacher, which takes care of all of the zooming functionality.
    mAttacher = new PhotoViewAttacher(mImageView);
}


// If you later call mImageView.setImageDrawable/setImageBitmap/setImageResource/etc then you just need to call
mAttacher.update();
53 голосов
/ 20 марта 2014

Вот один из самых эффективных способов, он работает плавно:

https://github.com/MikeOrtiz/TouchImageView

Поместите TouchImageView.java в свой проект. Затем его можно использовать так же, как ImageView.

Пример:

TouchImageView img = (TouchImageView) findViewById(R.id.img);

Если вы используете TouchImageView в XML, то вы должны предоставить полный пакет имя, потому что это пользовательский вид.

Пример:

    <com.example.touch.TouchImageView
            android:id="@+id/img”
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
10 голосов
/ 28 декабря 2016

Очень простой способ (проверено): -

PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();

Добавить нижнюю строку в build.gradle: -

compile 'com.commit451:PhotoView:1.2.4'
10 голосов
/ 28 июля 2016

Я надеюсь, что у вас все хорошо. Это часто случается со всеми, когда они хотят добавить новую функциональность в ваше приложение, тогда обычно они все ищут библиотеки, которые не являются хорошей тактикой, потому что вы не знаете, какой код в этом. libabry. поэтому я всегда предпочитаю разветвлять библиотеки и добавлять полезные классы и методы в код моего приложения.

поэтому, когда я застрял с той же проблемой, я много занимался исследованиями и разработками, а затем обнаружил класс, который дает возможность zoomIn, zoomOut и pinIn и out. так что вы можете видеть этот класс здесь. .

так как я уже говорил, это один класс. так что вы можете поместить этот класс в любом месте ваших проектов, например, utils folder ., и поместить следующие строки в свои XML-файлы, например:

<your_packege_name.TouchImageView
        android:id="@+id/frag_imageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:src="@drawable/default_flag"
        android:transitionName="@string/transition_name_phone" /> 

, и вы можете найти это изображение в вашей уважаемой деятельности, как вы это делали для всех видов, например -:

TouchImageView tv=(TouchImageView)findViewById(R.id.frag_imageview); 
tv.setImageResource(R.drawable.ic_play);

Вот и все для TouchImageView. наслаждайтесь нашим кодом:)

10 голосов
/ 06 декабря 2011

Вот отличный пример того, как реализовать эффект увеличения при прикосновении к изображению

Эффект увеличения при просмотре изображения

EDIT:

Также вот еще один замечательный.

Учебник для увеличения изображения

5 голосов
/ 06 декабря 2011

Это на самом деле лучший пример для Image Zoom и Pan в Android,

http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/

2 голосов
/ 15 августа 2018

Ниже приведен код для ImageFullViewActivity Класс

 public class ImageFullViewActivity extends AppCompatActivity {

        private ScaleGestureDetector mScaleGestureDetector;
        private float mScaleFactor = 1.0f;
        private ImageView mImageView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.image_fullview);

            mImageView = (ImageView) findViewById(R.id.imageView);
            mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());

        }

        @Override
        public boolean onTouchEvent(MotionEvent motionEvent) {
            mScaleGestureDetector.onTouchEvent(motionEvent);
            return true;
        }

        private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
            @Override
            public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
                mScaleFactor *= scaleGestureDetector.getScaleFactor();
                mScaleFactor = Math.max(0.1f,
                        Math.min(mScaleFactor, 10.0f));
                mImageView.setScaleX(mScaleFactor);
                mImageView.setScaleY(mScaleFactor);
                return true;
            }
        }
    }
2 голосов
/ 07 января 2016

Я предпочел библиотеку davemorrissey / subsampling-scale-image-view более chrisbanes / PhotoView (ответ star18bit)

  • Оба являются активными проектами (оба имеют некоторые коммиты в 2015 году)
  • У обоих есть демоверсия в PlayStore
  • subsampling-scale-image-view поддерживает большие изображения (выше 1080p) без исключения памяти из-за подвыборки, , которую PhotoView не поддерживает
  • subsampling-scale-image-view, кажется, имеет больший API и лучшую документацию

См. Как преобразовать AAR в JAR , если вы хотите использовать масштабирование изображения с субдискретизацией с Eclipse / ADT

2 голосов
/ 05 июня 2014

Вы можете проверить ответ в связанном вопросе. https://stackoverflow.com/a/16894324/1465756

Просто импортируйте библиотеку https://github.com/jasonpolites/gesture-imageview.

в ваш проект и добавьте в файл макета следующее:

<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:gesture-image="http://schemas.polites.com/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

<com.polites.android.GestureImageView
   android:id="@+id/image"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:src="@drawable/image"
   gesture-image:min-scale="0.1"
   gesture-image:max-scale="10.0"
   gesture-image:strict="false"/>`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...