首页 > 学院 > 开发设计 > 正文

点击图片放大

2019-11-07 23:40:41
字体:
来源:转载
供稿:网友

1、当前界面为图片源,新Activity为图片详细展示页

public void init(){ // 读取本地图片资源,存入bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_1); // 设置bitmap到ImageView ivZoominZoomout.setImageBitmap(bitmap); ivZoominZoomout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mIntent = new Intent(MainImageActivity.this,SecondImageActivity.class); //把该bitmap对象传入展示的详情界面 mIntent.putExtra("bitmap", bitmap); startActivity(mIntent); } });}

在详情页界面接收该bitmap对象

PRivate void initDetail(){ mIntent = getIntent(); if(mIntent !=null) { bitmap = mIntent.getParcelableExtra("bitmap"); ivSsecoundDetail.setImageBitmap(bitmap); } DisplayMetrics dm = new DisplayMetrics();//创建矩阵 getWindowManager().getDefaultDisplay().getMetrics(dm); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int w = dm.widthPixels; //得到屏幕的宽度 int h = dm.heightPixels; //得到屏幕的高度 float f = width/height;//得到图片的宽高比 if (f < 1) //长图 (图片的长大于宽) { scaleWidth = ((float)w)/width; scaleHeight = scaleWidth; LogUtils.logi("长图/t//t"+scaleHeight); }else if (f > 1) // 宽图 (图片的宽大于长) { scaleHeight = ((float)h)/height; scaleWidth = scaleHeight; }else // 1:1 { scaleWidth = w; scaleHeight = h; } Matrix matrix = new Matrix(); matrix.postScale(scaleWidth,scaleHeight); Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); ivSsecoundDetail.setImageBitmap(newBitmap); ivSsecoundDetail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(SecondImageActivity.this,MainImageActivity.class)); } });}

缺点: 跳转时有明显的闪跳,用户体验不佳(即Activity的跳转) 感觉换成fragment效果应该不错,但我没有实验

图片如果为网络资源的话,很可能会造成OOM

当然,为了解决在两个Activity中跳转的不佳体验以及性能的浪费,接下来使用在当前Activity中进行放大图片的展示

public void init2(){ bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image_2); ivZoominZoomout.setImageBitmap(bitmap); ivZoominZoomout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 显示展示详情页的组件 rl_main_zoom_big.setVisibility(View.VISIBLE); DisplayMetrics dm = new DisplayMetrics();//创建矩阵 getWindowManager().getDefaultDisplay().getMetrics(dm); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int w = dm.widthPixels; //得到屏幕的宽度 int h = dm.heightPixels; //得到屏幕的高度 float f = width/height;//得到图片的宽高比 if (f < 1) //长图 { scaleWidth = ((float)w)/width; scaleHeight = scaleWidth; LogUtils.logi("长图/t//t"+scaleHeight); }else if (f > 1) // 宽图 { scaleHeight = ((float)h)/height; scaleWidth = scaleHeight; }else // 1:1 { scaleWidth = w; scaleHeight = h; } Matrix matrix = new Matrix(); matrix.postScale(scaleWidth,scaleHeight); Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); iv_mainZoomout.setImageBitmap(newBitmap); } }); // 详细展示的组件,点击隐藏 rl_main_zoom_big.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rl_main_zoom_big.setVisibility(View.GONE); } });}

然后接下来就是配置文件了,其实很简单,把ImageView在RelativeLayout中居中就OK了,像网上说的要保证图片缩放比例,其实在给控件设置为warp_parent就没有所谓的拉伸,变形之说

<RelativeLayout android:id="@+id/rl_main_zoom_big" android:visibility="gone" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/color_2"> <ImageView android:id="@+id/iv_main_zoomout" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content"/></RelativeLayout>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表