Как реализовать эффект масштабирования для представления изображения в Android?

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

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

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

Ответ 1

Lazy man может использовать эту библиотеку, просто импортировать внутри своего проекта и

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();

Ответ 2

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

https://github.com/MikeOrtiz/TouchImageView

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

Пример:

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

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

Пример:

    <com.example.touch.TouchImageView
            android:id="@+id/img"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

Ответ 4

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

поэтому, когда я придерживался той же проблемы, я делаю много R & D, тогда я нахожу класс, который дает возможность масштабирования, масштабирования и вывода и вывода. поэтому вы можете увидеть этот класс здесь..

как я сказал ранее, это один класс. поэтому вы можете разместить этот класс в любом месте своих проектов, например папка utils. и поместить ниже строки в ваши 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. наслаждайтесь нашим кодом:)

Ответ 5

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

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

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

compile 'com.commit451:PhotoView:1.2.4'

Ответ 7

Вы можете проверить ответ в соответствующем вопросе. fooobar.com/questions/47791/...

Просто импортируйте библиотеку 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"/>`

Ответ 8

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

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

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

Ответ 9

Ниже приведен код для класса 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;
            }
        }
    }