2011-12-06 109 views
45

我必須實現圖像縮放,我已經嘗試了這麼多的代碼。但我沒有得到完整的手勢事件的想法。我想實現當我們應用雙擊時,圖像將根據觸摸位置進行縮放(事件x和y)。我必須在此時僅實現縮放不平移。任何物體都可以提示我嗎?如何在android中實現圖像視圖的縮放效果?

編輯: 其實我已經實現了與圖像viewflipper,如果我嘗試應用平移和縮放效果,有時圖像將被改變。 我想實現用戶點擊的縮放效果

給我的一些想法....

+1

可以在這裏找到可能幫助HTTP代碼: //stackoverflow.com/questions/5778532/how-to-zoom-in-out-an-imageviewnot-using-canvas-in-android/5935382#5935382 –

+0

利用https://github.com/rahulkapoor1/的優勢ZommableLoadingImageView – Rahul

+0

這個答案非常有用。我測試它,非常快樂。 https://stackoverflow.com/a/6650484/395093 – DanialAbdi

回答

5

這是事實也是如此,對於圖像縮放和平移在Android上最好的例子,

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

+0

其實我也使用相同的代碼,但問題是我必須檢測到雙擊2次,第一件事是放大你點擊的圖像,第二次恢復圖像。我不知道如何實現第一件事情。你應該幫助我嗎? –

53

懶惰的人可以使用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(); 
+0

如何在eclipse中導入這個庫,因爲導入後我得到錯誤... – pks

+4

@ pks你可以從這裏下載庫http://grepcode.com/snapshot/repo1.maven.org/maven2/com。 github.chrisbanes.photoview/library/1.2.1 直接鏈接:http://repo1.maven.org/maven2/com/github/chrisbanes/photoview/library/1.2.1/library-1.2.1.jar 只是放下jar文件到你的lib文件夾,並享受:) –

+1

@ star18bit非常感謝你分享這是真棒圖書館。它的作品像魅力:) –

49

下面是最有效的方法之一,它工作順利:

https://github.com/MikeOrtiz/TouchImageView

將放置在您的項目中。然後可以使用與 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" /> 
+0

這就像一個魅力..簡直太棒了。 – Javanator

+0

它給了我一個錯誤'android.widget.ImageView不能轉換爲pl.company.project.TouchImageView' – PolGraphic

+0

@PolGraphic你能告訴我你是如何使用TouchImageView? – Victor

2

你可以檢查在一個相關的問題的答案。 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"/>` 
+0

這是我之前發佈的針對此問題的帖子 https://stackoverflow.com/questions/6578320/how-to-apply-zoom-drag-and-rotation-到的圖像功能於機器人/ 47861501#47861501 – user2288580

2

我者優先圖書館davemorrissey/subsampling-scale-image-view 超過chrisbanes/PhotoView (star18bit的答案)

  • 兩者都是活躍項目(在2015年都有一些提交)
  • 都在PlayStore上有Demo
  • 子採樣尺度圖像視圖支持放大圖(上面1080)無記憶例外由於子採樣,which PhotoView doesn't support
  • 子採樣尺度圖像視圖似乎有更大的API和更好的文檔

How to convert AAR to JAR,如果你喜歡用二次抽樣規模的圖像視圖使用Eclipse/ADT

8

我希望你在做well.it往往當他們想在你的應用程序,然後通常會添加一些新的功能與所有發生他們所有搜索不好的策略庫因爲你不知道這個解釋器中的代碼是什麼類型的。所以我總是喜歡分叉庫,並在我的應用程序代碼中添加有用的類和方法。

因此,當我堅持同樣的問題,我做了很多R & D然後我找到一個類,它提供了zoomIn,zoomOut和pinIn和out的能力。所以你可以看到類here.

就像我之前告訴過的那樣,這是一個單獨的課程。所以你可以把這個類中的任何地方你的項目,如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。 享受我們的代碼:)

8

非常簡單的方法(測試): -

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

添加波紋線的build.gradle: -

compile 'com.commit451:PhotoView:1.2.4' 
相關問題