Как реализовать эффект масштабирования для представления изображения в 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" />
Ответ 3
Вот отличный пример того, как реализовать эффект масштабирования при касании с помощью изображения
Эффект масштабирования на изображении
EDIT:
Также здесь еще один отличный.
Закрепить для увеличения урока
Ответ 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'
Ответ 6
Это действительно лучший пример для Image Zoom и Pan в android,
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/
Ответ 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;
}
}
}