您的位置:首页 > 其它

为ImageView设置背景的方法以及区别

2017-06-01 17:46 411 查看
为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();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐