2012-04-04 64 views
3

我工作的圖片選擇/作物程序及以下使用此代碼:Android MediaStore裁剪功能,如何使選擇箭頭始終可見?

http://www.androidworks.com/crop_large_photos_with_android/comment-page-1#comment-969

至於我能理解,我們設置屬性與把羣衆演員我們的意圖像下面的代碼。

爲了改變選擇區域,我們需要觸摸邊框,然後箭頭變得可見,但我想要做的是使它們始終可見,因爲很難讓用戶理解這種方式。 Instagram的Android應用程序這樣做,所以我想有一種方法可以做到這一點。

謝謝。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 
       intent.setType("image/*"); 
       intent.putExtra("crop", "true"); 
       intent.putExtra("aspectX", aspectX); 
       intent.putExtra("aspectY", aspectY); 
       intent.putExtra("outputX", outputX); 
       intent.putExtra("outputY", outputY); 
       intent.putExtra("scale", scale); 
       intent.putExtra("return-data", return_data); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri()); 

編輯/解決方案: 感謝@Renard我發現像這樣的解決方案:

我用這個庫的源代碼: http://gitorious.org/0xdroid/packages_apps_gallery3d/trees/3c02f2877dc2f8f0b5c01d03fa2b487c040e4000

我嘗試了一些其他的畫廊資源的代碼太多,但這是最容易維護的一個。

你只需要刪除以下,如果檢查中Highlightview.java類的Draw()函數:

if (mMode == ModifyMode.Grow) 

當你這樣做,它的作品,但箭頭repating本身,而爲了避免移動和您需要更改moveBy()方法的最後一行是:

mContext.invalidate(invalRect); 

與此:

mContext.invalidate(); 
+0

嗨我想裁剪從相機捕獲的圖像,任何想法? – AB1209 2014-03-17 06:35:53

回答

1

是的,有一種方法。但這並不容易。

檢查圖庫應用程序的源代碼。特別是HighlightView.java。您將看到負責繪製箭頭的方法僅在用戶觸摸邊框時調用。 所以你需要抓取CropImage活動的源代碼。將其包含在您的應用程序中並修改HighlightView.java的draw()方法以始終調用drawResizeDrawables()。

這樣做的好處是,您可以確定作物意圖可以跨所有設備使用,即使它們具有不支持作物意圖的自定義畫廊。

+0

謝謝@Renard我開始尋找畫廊的源代碼,但我需要確保在我開始之前,我將使用此[鏈接](https://github.com/CyanogenMod/android_packages_apps_Gallery)源代碼,我想我不會有機會只包含CropImage和HighlightView,因爲它們也會導入其他類,所以我將把所有類都帶到我的項目中(對嗎?)。我必須使用相同的包裝名稱嗎?在這個例子中是com.android.camera.gallery,或者我可以在一個自定義的包名下使用它。最後一個問題,我應該如何改變我的意圖,這樣它會調用改變的畫廊?謝謝! – Osman 2012-04-04 11:26:50

+0

是的,解決方案並不容易,因爲您需要導入一些不同的類。我爲我的一個項目做過一次,需要導入5個不同的類。包名稱當然可以改變。當你創建intent時,像這樣:\t \t \t \t \t Intent intent = new Intent(this,CropImage.class); – Renard 2012-04-04 11:35:54