development

Android에서 이미지보기에 대한 확대 / 축소 효과를 구현하는 방법은 무엇입니까?

big-blog 2021. 1. 9. 11:27
반응형

Android에서 이미지보기에 대한 확대 / 축소 효과를 구현하는 방법은 무엇입니까?


이미지 확대 / 축소를 구현해야하는데 너무 많은 코드로 시도했지만 제스처 이벤트에 대한 완전한 아이디어를 얻지 못했습니다. 더블 탭 적용시 구현하고 싶은데 터치 위치 (이벤트 x, y)에 따라 이미지가 확대됩니다. 이때는 확대 / 축소 만 구현하면됩니다.

편집 : 실제로 이미지가있는 뷰 플리퍼를 구현했습니다. 팬 및 확대 / 축소 효과를 적용하려고하면 때때로 이미지가 변경됩니다. 사용자가 클릭되는 위치에 대한 확대 / 축소 효과를 구현하고 싶습니다 .

그것에 대해 좀 생각 해봐 ....


게으른 사람은 이 lib 를 사용할 수 있습니다. 프로젝트 내에서 가져 오기만하면됩니다.

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

다음은 가장 효율적인 방법 중 하나이며 원활하게 작동합니다.

https://github.com/MikeOrtiz/TouchImageView

장소 TouchImageView.java프로젝트에서. 그런 다음과 동일하게 사용할 수 있습니다 ImageView.

예:

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

TouchImageViewxml에서 사용 하는 경우 사용자 정의보기이므로 전체 패키지 이름을 제공해야합니다.

예:

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

다음은 imageview로 터치시 확대 / 축소 효과를 구현하는 방법에 대한 좋은 예입니다.

imageview에 대한 확대 / 축소 효과

편집하다:

또한 여기에 또 다른 훌륭한 것이 있습니다.

핀치로 확대 / 축소 자습서


앱에 새로운 기능을 추가하고 싶을 때 자주 발생하며 일반적으로 해당 라이브러리에 어떤 종류의 코드가 있는지 모르기 때문에 좋은 전술이 아닌 라이브러리를 모두 검색합니다. 그래서 저는 항상 라이브러리를 포크하고 응용 프로그램 코드에 유용한 클래스와 메서드를 추가하는 것을 선호합니다.

그래서 같은 문제를 고수 할 때 많은 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. 우리 코드를 즐기십시오 :)


아주 간단한 방법 (테스트 됨) :-

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

build.gradle에 다음 줄을 추가하십시오.

compile 'com.commit451:PhotoView:1.2.4'

이것은 사실 Android에서 Image Zoom 및 Pan에 대한 최고의 예입니다.

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


You could check the answer in a related question. https://stackoverflow.com/a/16894324/1465756

Just import library https://github.com/jasonpolites/gesture-imageview.

into your project and add the following in your layout file:

<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"/>`

I prefered the library davemorrissey/subsampling-scale-image-view over chrisbanes/PhotoView (answer of star18bit)

  • Both are active projects (both have some commits in 2015)
  • Both have a Demo on the PlayStore
  • subsampling-scale-image-view supports large images (above 1080p) without memory exception due to sub sampling, which PhotoView doesn't support
  • subsampling-scale-image-view seems to have larger API and better documentation

See How to convert AAR to JAR, if you like to use subsampling-scale-image-view with Eclipse/ADT


Below is the code for ImageFullViewActivity Class

 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;
            }
        }
    }

ReferenceURL : https://stackoverflow.com/questions/8399296/how-to-implement-zoom-effect-for-image-view-in-android

반응형