web-dev-qa-db-ja.com

Androidの画像ビューにズーム効果を実装する方法は?

画像ズームを実装する必要があるため、非常に多くのコードを試しましたが、ジェスチャーイベントの完全なアイデアは得られませんでした。ダブルタップを適用するときに実装したい、画像はタッチ場所(イベントxとy)に応じてズームされます。この時点ではパンのみでズームのみを実装する必要があります。

編集:実際に私は画像でそのビューフリッパーを実装しました、パンとズーム効果を適用しようとすると、時々画像が変更されます。ユーザーがクリックされた場所にズーム効果を実装したい

そのことについて少し考えてください。

怠け者は this 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();
59
star18bit

これは最も効率的な方法の1つで、スムーズに機能します。

https://github.com/MikeOrtiz/TouchImageView

プロジェクトにTouchImageView.Javaを配置します。 ImageViewと同じように使用できます。

例:

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

XmlでTouchImageViewを使用している場合、カスタムビューであるため、完全なパッケージ名を指定する必要があります。

例:

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

アプリに新しい機能を追加したいときによく起こりますが、通常は、そのライブラリにどのようなコードがあるのか​​わからないので、戦術が良くないライブラリをすべて検索します。そのため、ライブラリをフォークし、アプリケーションコードに有用なクラスとメソッドを追加することを常に好みます。

そのため、同じ問題に悩まされたときに、多くの研究開発を行い、zoomIn、zoomOut、pinIn、outの機能を提供するクラスを見つけました。そのクラス here。 を見ることができます。

前に言ったように、それは単一のクラスです。 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
John smith

非常に簡単な方法(テスト済み):-

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

Build.gradleに次の行を追加します。

compile 'com.commit451:PhotoView:1.2.4'
10

以下は、imageviewでのタッチに対するズーム効果の実装方法に関する素晴らしい例です。

imageviewのズーム効果

編集:

また、別の素晴らしいものもあります。

ピンチズームチュートリアル

10

実際、これはAndroidの画像ズームとパンの最高の例です。

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

5
Sujit

以下は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
Efi G

ライブラリが好き davemorrissey/subsampling-scale-image-viewoverchrisbanes/PhotoView ( star18bitの回答)

  • 両方ともアクティブなプロジェクトです(両方とも2015年にいくつかのコミットがあります)
  • どちらもPlayStoreにデモがあります
  • subsampling-scale-image-viewは、サブサンプリングによるメモリ例外なしで大きな画像(1080p以上)をサポートします PhotoViewはサポートしていません
  • subsampling-scale-image-viewには、より大きなAPIとより良いドキュメントがあるようです

Eclipse/ADTでsubsampling-scale-image-viewを使用する場合は、 AARをJARに変換する方法 を参照してください

2
OneWorld

関連する質問の答えを確認できます。 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"/>`
2
arniotaki