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

为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();
        }

    }


}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值