【问题标题】:Android ImageView fit to Screen onTouchAndroid ImageView 适合屏幕 onTouch
【发布时间】:2012-06-01 18:52:46
【问题描述】:

如何使图像适合从相机捕获的屏幕?我目前有一个预览,它是所拍摄图像的一种缩略图版本。我想触摸它并使其适合整个屏幕。在布局中,我有属性:

android:onClick="previewPhoto"

但我不知道如何继续。这是我认为我应该做的,但想知道是否有更简单的方法。如果我开始一个新的活动,我应该如何完成以下代码?

public void previewPhoto(View view){
    Toast.makeText(this, "Photo touched!", Toast.LENGTH_SHORT).show();
    mImageView.setScaleType(ScaleType.FIT_XY);

    Intent fullScreenIntent = new Intent(view.getContext(),FullImageActivity.class);
    fullScreenIntent.putExtra
    //ProfilePageNormalUser.this.startActivity(fullScreenIntent); 
}

请注意,mImageView 是一个保存拍摄照片的对象。当我简单地使用setScaleType(ScaleType.FIT_XY); 时,它会使图像适合小缩略图视图。

【问题讨论】:

    标签: android onclick imageview touch-event image-enlarge


    【解决方案1】:

    3 种可能的解决方案,但是对于所有这些,您需要为视图设置一个新的 layoutParams(对于 width 和 height ,将它们设置为 fillParent ):

    1. 在 imageView 上使用“setContentView”将其用作新布局。完成后,在您使用的布局上使用此方法返回上一个布局。

    2. 它需要占据根视图的整个空间。此解决方案取决于活动的布局。例如,如果布局复杂,将其包裹在一个framelayout中,并将视图移动到framelayout,然后设置layoutParams。

    3. 将视图设置在所有视图的顶部,然后设置 layoutParams.example(在示例中,“视图”是您希望设置在顶部的视图,对您来说,这将是“mImageView”):

    ...
    final View view=findViewById(R.id.view1);
    final WindowManager.LayoutParams layoutParams=new WindowManager.LayoutParams();
    layoutParams.gravity=Gravity.TOP|Gravity.LEFT;
    layoutParams.width=view.getLayoutParams().width;
    layoutParams.height=view.getLayoutParams().height;
    layoutParams.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    layoutParams.flags|=WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
    final ViewGroup parent=(ViewGroup)view.getParent();
    parent.removeView(view);
    final WindowManager windowManager=(WindowManager)getSystemService(Context.WINDOW_SERVICE);
    windowManager.addView(view,layoutParams);
    // TODO handle overlapping title bar and/or action bar if needed
    

    【讨论】:

    • ImageView 目前是我的主要布局的子小部件,我的意思是正在显示多个项目 + 新拍摄的照片,所以我可以以编程方式创建一个不在我的布局 xml 中的新视图文件?我的目标是让它适应屏幕,然后询问用户是否应该将照片保存到存储或丢弃。
    • 因为 mImageView 是缩略图,所以您建议的代码没有使图像适合屏幕。照片保持缩略图大小,上方和下方有空白区域,并被裁剪到其宽度。
    • 它是否扩展到设备的宽度或高度?如果是这样,那是因为它保持了纵横比以使其仍然看起来不错。如果您不希望它保持纵横比,请将“adjustViewBounds”设置为 false 。关于使用没有xml的视图的问题,当然可以。您甚至可以在实际视图上使用“setContentView”,即使您的活动之前已经显示了布局。我已更新我的答案以包含此解决方案。
    • 无论如何,请显示相关代码,以便我可以告诉你什么问题。
    【解决方案2】:

    如果您只需要全屏显示照片而不需要自定义布局/按钮,您可以使用以下代码启动图库应用(或任何其他支持显示图像的第三方应用):

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file://" + picturePath),"image/*");
    startActivity(intent);  
    

    编辑:

    picturePath 可以在启动相机时设置,这样你就知道图片的存储位置。请在此处查看 takePhotoFromCamera 方法:

    https://github.com/miguelrodelas/Android-Snippets/blob/master/ImageSnippets.java

    该方法返回图片路径。它使用 getOutputMediaFile 方法(也有)从日期生成图像名称。

    【讨论】:

    • 如果我使用此代码,但我没有将图像保存到存储中(我将图像保存在 ImageView 小部件中)Uri.parse("file://" + picturePath) 参数需要如何处理?代替它,我可以只传递 mImageView 对象或位图对象吗?
    • 我已经编辑了我的答案,包括如何知道图片路径。我认为您使用的是 onActivityResult 获得的缩略图。要全屏显示图片,您需要知道图片路径,请尝试上述方法。
    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 2017-07-05
    • 2012-05-02
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多