Android MediaStore裁剪功能,如何使选择箭头始终可见?

时间:2012-04-04 09:41:10

标签: android image crop 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)  

当你这样做时它会起作用,但箭头在移动时会自我重复,以避免你需要改变moveBy()方法的最后一行,即:

mContext.invalidate(invalRect);

用这个:

mContext.invalidate();

1 个答案:

答案 0 :(得分:1)

是的,有办法。但这并不容易。

检查图库应用的源代码。特别是HighlightView.java。您将看到负责绘制箭头的方法仅在用户触摸边框时调用。 因此,您需要获取CropImage活动的源代码。将它包含在您的应用程序中并修改HighlightView.java的draw()方法以始终调用drawResizeDrawables()。

这样做的好处是,您可以确保裁剪打算可以在所有设备上运行,即使它们具有不支持裁剪意图的自定义Gallery。