为ImageView设置背景
//-------自动拉伸(变形)
//如果在布局文件中写了图片的宽高,当图片小的时候,自动拉伸填充窗口
setBackground();
setBackgroundResource();
setBackgroundResource();
//-------不自动拉伸(不变形)
//如果在布局文件中写了图片的宽高,当图片小的时候,不会自动拉伸填充窗口--如果设置了属性
// android:scaleType="fitXY",就会对图片进行拉伸并填充
setImageDrawable();
setImageBitmap();
setImageResource();
下面进行测试
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp"
/>
<ImageView
android:background="@android:color/background_dark"
android:id="@+id/imageView2"
android:layout_width="300dp"
android:layout_height="300dp"
/>
</LinearLayout>
代码如下
public class MainActivity extends FragmentActivity {
public ImageView imageView;
public ImageView imageView1;
public ImageView imageView2;
private String TAG = "MainActivity";
public String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView1 = (ImageView) findViewById(R.id.imageView);
imageView2 = (ImageView) findViewById(R.id.imageView2);
//将mipmap文件夹下的图片保存到本地的SD卡上
//-------------------------------------------------------------------------------------------------------------
DrawabletoSD drawabletoSD = new DrawabletoSD(this);
drawabletoSD.saveDrawableById(R.mipmap.dog, "dog.jpg", Bitmap.CompressFormat.JPEG);
//-------------------------------------------------------------------------------------------------------------
//如果在布局文件中写了图片的宽高,当图片小的时候,自动拉伸填充窗口
// imageView1.setBackground(getResources().getDrawable(R.mipmap.dog));//变形
// imageView1.setBackgroundResource(R.mipmap.dog);//变形
imageView1.setBackgroundDrawable(getResources().getDrawable(R.mipmap.dog));变形
//-------------------------------------------------------------------------------------------------------------
//如果在布局文件中写了图片的宽高,当图片小的时候,不会自动拉伸填充窗口--如果设置了属性
// android:scaleType="fitXY",就会对图片进行拉伸并填充
// imageView2.setImageDrawable(getResources().getDrawable(R.mipmap.dog)); //不会变形
//File.separator 遍历系统文件,获取到dog.jpg
// File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/path",
// name);
path = getExternalCacheDir()+ "/path" + "/dog.jpg";
Log.i(TAG, "path=" + path);
Bitmap bm = BitmapFactory.decodeFile(path);
imageView2.setImageBitmap(bm);//不会变形
// imageView2.setImageResource(R.mipmap.dog);//不会变形
}
}
效果图如下
工具类
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* author liuyafei
* email 543296994@qq.com
* Created
*/
public class DrawabletoSD {
private Activity mactivity;
public DrawabletoSD(Activity activity) {
this.mactivity = activity;
}
/**
* 存储资源为ID的图片
*
* @param id
* @param name
*/
public void saveDrawableById(int id, String name, Bitmap.CompressFormat format) {
Drawable drawable = idToDrawable(id);
Bitmap bitmap = drawableToBitmap(drawable);
saveBitmap(bitmap, name, format);
}
/**
* 将资源ID转化为Drawable
*
* @param id
* @return
*/
public Drawable idToDrawable(int id) {
return mactivity.getResources().getDrawable(id);
}
/**
* 将Drawable转化为Bitmap
*
* @param drawable
* @return
*/
public Bitmap drawableToBitmap(Drawable drawable) {
if (drawable == null)
return null;
return ((BitmapDrawable) drawable).getBitmap();
}
/**
* 将Bitmap以指定格式保存到指定路径
*
* @param bitmap
* @param
* @param
*/
public void saveBitmap(Bitmap bitmap, String name, Bitmap.CompressFormat format) {
// 创建一个位于SD卡上的文件 // 判断SD卡存在
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File root=mactivity.getExternalCacheDir();
File dir=new File(root.getAbsolutePath()+"/path");
if (!dir.exists()){
dir.mkdirs();
}
File file=new File(dir,name);
try {
// 打开指定文件输出流
FileOutputStream out = new FileOutputStream(file);
// 将位图输出到指定文件
bitmap.compress(format, 100,
out);
out.close();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(mactivity, "保存失败,请检查sd卡可用空间", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(mactivity, "sd卡不可用", Toast.LENGTH_LONG).show();
}
}
}