Android图片加载由于手机内存的原因,大图往往会使手机OOM(out of memory),所以需要对图片进行相应的压缩。
android提供了一个类BitmapFactory.Options,想获得一个图片对象要提供一个Options对象参数。
代码实现:
布局文件代码:
线性布局中放置两张图片,一张用来显示原图,一张用来显示二次采样后的图。点击按钮显示两张图片。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.shen.picsecondepicdemo.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ChangePic" android:onClick="changePic"/> <ImageView android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ivPicOri" android:src="@mipmap/ic_launcher"/>
主要代码:<ImageView android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ivPic" android:src="@mipmap/ic_launcher"/></LinearLayout>
public class MainActivity extends AppCompatActivity { private ImageView ivPic; private ImageView ivPicOri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ivPic = (ImageView) findViewById(R.id.ivPic); ivPicOri = (ImageView) findViewById(R.id.ivPicOri); } public void changePic(View view){
//设置原始图片资源 ivPicOri.setImageResource(R.mipmap.b); //进行压缩图片 BitmapFactory.Options options = new BitmapFactory.Options();
//设定先加载图片框,不加载图片,用来测量原始图的宽和高 options.inJustDecodeBounds = true;
//测量 BitmapFactory.decodeResource(getResources(),R.mipmap.b,options);
//自定义宽和高 int myWidth = 50; int myHeight = 80;
//得到原始图片的宽和高 int realWidth = options.outWidth; int realHeight = options.outHeight; Log.i("realWidth",realWidth+""); Log.i("realHeight",realHeight+"");
//先设定一个压缩比 int sampleSize = 1;
//进行对比来决定真实的压缩比 sampleSize = Math.round((float)realHeight/myHeight)>Math.round((float)realWidth/myWidth)?Math.round((float)realHeight/myHeight):Math.round((float)realWidth/myWidth);
//设定真实的压缩比 options.inSampleSize = sampleSize; options.inJustDecodeBounds = false;
//显示压缩后的图
ivPic.setImageBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.b,options)); } }点击按钮进行图片二次采样后效果如图~
小伙伴们也来试试吧