单击图像时更改ImageView的大小

时间:2014-06-04 10:51:17

标签: java android imageview

我试图在ImageView中获取一张照片,以便在点击时增加尺寸。我搜索了好几天,但还没找到我需要的东西。 目前我正在使用来自MikeOrtiz的TouchImageView,它的工作原理是,当点击图像时,它会放大。 但是我希望图像尺寸增大,而不仅仅是放大,并且在保持页面的其余部分不透明的情况下,图像需要增加到屏幕的大小,同时保持其纵横比,即它是方形图像,所以它不应该变成矩形图像。

我有以下XML代码:

<LinearLayout
<com.example.TouchImageView
    android:id="@+id/imageView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:layout_marginTop="14dp"
    android:contentDescription="@string/CompanyHeader" 
    android:src="@drawable/entrancex250"/>

</LinearLayout>

我使用的是TouchImageView:

https://github.com/MikeOrtiz/TouchImageView/blob/master/src/com/ortiz/touch/TouchImageView.java

正如所解释的那样,它的作用是放大,但我需要的是在点击时使图像本身变大,然后再次点击时恢复到正常尺寸。

非常感谢。

5 个答案:

答案 0 :(得分:2)

   public class TheCompany extends Activity implements OnMenuItemClickListener{

        public static final float screen_width;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.the_company);
            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            screen_width = metrics.widthPixels;

        }

    }

然后在你的页面中执行以下操作:

        ImageView imageView = (ImageView) findViewById(R.id.imageView2);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                float scale =  TheCompany.screen_width / view.getWidth();
                if(view.getScaleX() == 1) {
                    view.setScaleY(scale);
                    view.setScaleX(scale);
                }else{
                    view.setScaleY(1);
                    view.setScaleX(1);
                }
            }


        });

答案 1 :(得分:2)

如果您只需要增加ImageView的大小,那么您根本不应该使用TouchImageView,而应该使用ImageView。

<ImageView
    android:id="@+id/image_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/picture" 
    android:clickable="true" />

在此imageview中的java类setonclicklistener中,在onclick内部通过设置布局参数来更改imageview的大小。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(newWidth, newHeight);
imageView.setLayoutParams(params);

此处newWidth和newHeight是您想要点击图片视图的尺寸。

答案 2 :(得分:0)

看看这个很棒的图书馆:PhotoView

它支持缩放并具有点击侦听器,因此您只需缩放

即可

答案 3 :(得分:0)

替代方案可以使用以下代码

TouchImageView v = (TouchImageView) getActivity().findViewById("imageView2");
v.setHeight(fill_parent);
v.setWidth(fill_parent);

答案 4 :(得分:0)

由于@micnubinub,我想放下我最后做的事情。我把他的答案作为正确答案,因为他们帮助我到达了我需要的地方。但实际的代码不在答案中,所以我想把它放在这里,万一它可以帮助其他人。

首先,@micnubinub建议我在点击时使用对话框显示图像。所以我在res / layout下创建了一个dialog.xml,如下所示:

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="910dp"
android:minWidth="910dp"
android:scaleType="fitCenter"
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

然后单击时显示图像的Java类如下:

    final ImageView imageView = (ImageView) findViewById(R.id.imageView2);
    imageView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {

    final Dialog dialog = new Dialog(TheCompany.this, R.style.CustomDialog);
    if ((getResources().getConfiguration().screenLayout & 
            Configuration.SCREENLAYOUT_SIZE_MASK) == 
                Configuration.SCREENLAYOUT_SIZE_XLARGE) {
            // on a large screen device ...
        dialog.setContentView(R.layout.dialog_xlarge);}

        else dialog.setContentView(R.layout.dialog);


    ImageView im = (ImageView) dialog.findViewById(R.id.imageView);
    im.setImageResource(R.drawable.entrancex250);
    im.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    dialog.dismiss();
    }
    });
    dialog.show();
    Window window = dialog.getWindow();
    window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    }
    }); 
}

我还在样式中创建了一个customdialog,如下所示:

<style name="CustomDialog" parent="@android:style/Theme.Translucent.NoTitleBar">
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowEnterAnimation">@anim/zoom_in</item>
<item name="android:windowExitAnimation">@anim/zoom_out</item>
</style>

这非常有效,再次感谢@micnubinub。

dialog_xlarge与对话框相同,但高度和宽度较大。