画像ズームを実装する必要があるため、非常に多くのコードを試しましたが、ジェスチャーイベントの完全なアイデアは得られませんでした。ダブルタップを適用するときに実装したい、画像はタッチ場所(イベント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();
これは最も効率的な方法の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" />
アプリに新しい機能を追加したいときによく起こりますが、通常は、そのライブラリにどのようなコードがあるのかわからないので、戦術が良くないライブラリをすべて検索します。そのため、ライブラリをフォークし、アプリケーションコードに有用なクラスとメソッドを追加することを常に好みます。
そのため、同じ問題に悩まされたときに、多くの研究開発を行い、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
については以上です。コードをお楽しみください:)
非常に簡単な方法(テスト済み):-
PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();
Build.gradleに次の行を追加します。
compile 'com.commit451:PhotoView:1.2.4'
実際、これはAndroidの画像ズームとパンの最高の例です。
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/
以下は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;
}
}
}
ライブラリが好き davemorrissey/subsampling-scale-image-viewoverchrisbanes/PhotoView ( star18bitの回答)
Eclipse/ADTでsubsampling-scale-image-viewを使用する場合は、 AARをJARに変換する方法 を参照してください
関連する質問の答えを確認できます。 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"/>`