精华内容
参与话题
问答
  • ImageView属性详解

    千次阅读 2012-11-25 10:01:40
    正文  一、结构  java.lang.Object  android.view.View ... android.widget.ImageView    已知直接子类:  ImageButton, QuickContactBadge     已知间接子类:  ZoomButton

    正文

      一、结构

        java.lang.Object

          android.view.View

            android.widget.ImageView

     

        已知直接子类:

        ImageButton, QuickContactBadge 

     

        已知间接子类:

        ZoomButton

     

      二、类概述

        显示任意图像,例如图标。ImageView类可以加载各种来源的图片(如资源或图片库),需要计算图像的尺寸,比便它可以在其他布局中使用,并提供例如缩放和着色(渲染)各种显示选项。

     

      三、XML属性

     

    属性名称

    描述

    android:adjustViewBounds

    是否保持宽高比。需要与maxWidth、MaxHeight一起使用,否则单独使用没有效果。

    android:cropToPadding

    是否截取指定区域用空白代替。单独设置无效果,需要与scrollY一起使用,效果如下,实现代码见代码部分:

     

     

    android:maxHeight

    设置View的最大高度,单独使用无效,需要与setAdjustViewBounds一起使用。如果想设置图片固定大小,又想保持图片宽高比,需要如下设置:

    1) 设置setAdjustViewBounds为true;

    2) 设置maxWidth、MaxHeight;

    3) 设置设置layout_width和layout_height为wrap_content。

    android:maxWidth

    设置View的最大宽度。同上。

    android:scaleType

    设置图片的填充方式。

    matrix

    0

    用矩阵来绘图

     

    fitXY

    1

    拉伸图片(不按比例)以填充View的宽高

     

    layout_

    height

    :30px


    layout_

    width

    :120px

    fitStart

    2

    按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的左边

     

    fitCenter

    3

    按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的中间

     

    fitEnd

    4

    按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的右边

     

    center

    5

    按原图大小显示图片,但图片宽高大于View的宽高时,截图图片中间部分显示

     

     

    layout_

    height

    :60px


    layout_

    width

    :80px


    padding

    :10px

     

    centerCrop

    6

    按比例放大原图直至等于某边View的宽高显示。

     

    centerInside

    7

    当原图宽高或等于View的宽高时,按原图大小居中显示;反之将原图缩放至View的宽高居中显示。

     

    android:src

    设置View的drawable(如图片,也可以是颜色,但是需要指定View的大小)

    android:tint

    将图片渲染成指定的颜色。见下图:

    左边为原图,右边为设置后的效果,见后面代码。

     

      四、代码  

        4.1  android:tint

    Java代码  收藏代码
    1. <ImageView android:background="@android:color/white" android:src="@drawable/btn_mode_switch_bg"  
    2.         android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>  
    3.     <ImageView android:layout_marginLeft="5dp" android:background="@android:color/white" android:tint="#ffff00" android:src="@drawable/btn_mode_switch_bg"  
    4.         android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>   
         4.2  android:cropToPadding
    Java代码  收藏代码
    1. <ImageView android:background="@android:color/white" android:scrollY="-10px" android:cropToPadding="true" android:src="@drawable/btn_mode_switch_bg"  
    2.         android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>  
    3.     <ImageView android:background="@android:color/white" android:scrollY="10px" android:cropToPadding="true" android:src="@drawable/btn_mode_switch_bg"  
    4.         android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>  
    5.     <ImageView android:paddingTop="10px"  android:background="@android:color/white" android:scrollY="10px" android:cropToPadding="true" android:src="@drawable/btn_mode_switch_bg"  
    6.         android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>  
    7.     <ImageView android:paddingTop="10px" android:background="@android:color/white" android:scrollY="10px" android:cropToPadding="false" android:src="@drawable/btn_mode_switch_bg"  
    8.         android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>   
    9.    
    展开全文
  • 关于ImageView,常有一些混淆。第1个混淆点:(1)background通常指的都是背景,而src指的是内容。(2)当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸。第2个混淆点:scaleType缩放类型设置:fitXY:...

    关于ImageView,常有一些混淆。

    第1个混淆点:

    (1)background通常指的都是背景,而src指的是内容

    (2)当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸。

    第2个混淆点:

    scaleType缩放类型设置:

    • fitXY:对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变
    • fitStart:保持纵横比缩放图片,知道较长的边与Image的编程相等,缩放完成后将图片放在ImageView的左上角
    • fitCenter:同上,缩放后放于中间;
    • fitEnd:同上,缩放后放于右下角;
    • center:保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
    • centerCrop:保持横纵比缩放图片,知道完全覆盖ImageView,可能会出现图片的显示不完全
    • centerInside:保持横纵比缩放图片,直到ImageView能够完全地显示图片
    • matrix:默认值,不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理

    ps:一般情况下可以用centerInside来设置缩放类型。

    最后附上一个圆形ImageView的生成方法。

    效果如下:


    创建步骤:

    1、创建一个RoundImageView来继承ImageView。

    2、然后重写onDraw( )方法来重写绘制View。

    3、在Activity中调用并传入相应的bitmap位图

    代码如下:

    package com.deepreality.imageviewdemo;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.PaintFlagsDrawFilter;
    import android.graphics.Path;
    import android.graphics.Rect;
    import android.graphics.Region;
    import android.util.AttributeSet;
    
    public class RoundImageView extends android.support.v7.widget.AppCompatImageView {
    
        private Bitmap mBitmap;
        private Rect mRect = new Rect();
        private PaintFlagsDrawFilter pdf = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG);
        private Paint mPaint = new Paint();
        private Path mPath=new Path();
        public RoundImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
    
        //传入一个Bitmap对象
        public void setBitmap(Bitmap bitmap) {
            this.mBitmap = bitmap;
        }
    
    
        private void init() {
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
            mPaint.setAntiAlias(true);// 抗锯尺
        }
    
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if(mBitmap == null)
            {
                return;
            }
            mRect.set(0,0,getWidth(),getHeight());
            canvas.save();
            canvas.setDrawFilter(pdf);
            mPath.addCircle(getWidth() / 2, getWidth() / 2, getHeight() / 2, Path.Direction.CCW);
            canvas.clipPath(mPath, Region.Op.REPLACE);
            canvas.drawBitmap(mBitmap, null, mRect, mPaint);
            canvas.restore();
        }
    }
    

    activity_main.xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        tools:context=".MainActivity">
    
        <com.deepreality.imageviewdemo.RoundImageView
            android:id="@+id/img_round"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_margin="5px"/>
    
    </android.support.constraint.ConstraintLayout>

    MainActivity.java如下:

    package com.deepreality.imageviewdemo;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    public class MainActivity extends AppCompatActivity {
    
        private RoundImageView img_round;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            img_round = (RoundImageView) findViewById(R.id.img_round);
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.userinfo_userimg09);
            img_round.setBitmap(bitmap);
            if (bitmap.isRecycled()) {
                bitmap.recycle();
            }
        }
    }
    

    再上一个功能,从相册中选择图片并显示。

    xml布局文件中添加一个ImageView即可。MainActivity.java中的代码如下:

    package com.deepreality.myapplication001;
    
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.ImageView;
    
    import java.io.BufferedInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private ImageView image_choose;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            image_choose = findViewById(R.id.image);
            image_choose.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
                case R.id.image: {
                    Intent intent = new Intent(Intent.ACTION_PICK, null);
                    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            "image/*");
                    startActivityForResult(intent, 0x1);
                    break;
                }
            }
        }
    
        //获取网络图片
        private Bitmap getImageBitmap(String url) {
            Bitmap bm = null;
            try {
                URL aURL = new URL(url);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                bm = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();
            } catch (IOException e) {}
            return bm;
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            if (requestCode == 0x1 && resultCode == RESULT_OK) {
                if (data != null) {
                    image_choose.setImageURI(data.getData());
                }
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
    

    ImageView显示本地SD卡中的图片:

    Bitmap bitmap = BitmapFactory.decodeFile(s);
    
    mImageview.setImageBitmap(bitmap);


    展开全文
  • ImageView控件图片显示

    千次阅读 2019-01-21 14:31:34
    1. // 读取uri所在的图片 Uri uri = data.getData(); Log.d(TAG, "目录为:" + uri); mImage.setImageURI(uri);//显示大图片的时候app会崩溃或者是无法显示 ...Uri uri = data.getData();...
    1.
    // 读取uri所在的图片
    Uri uri = data.getData();
    Log.d(TAG, "目录为:" + uri);
    mImage.setImageURI(uri);//显示大图片的时候app会崩溃或者是无法显示
    
    2.
    Uri uri = data.getData();
    try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        mImage.setImageBitmap(bitmap);//显示图片
    }
    catch (Exception e)
    {
        Log.d(TAG, e.getMessage());
         e.printStackTrace();
    }

    3.

    private void setImage(Uri uri){
        try {
            Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver()
                    .openInputStream(uri));
            Matrix matrix = new Matrix();
            matrix.setScale(1.0f, 1.0f);
            bitmap = Bitmap.createBitmap( bitmap, 0, 0,  bitmap.getWidth(), bitmap.getHeight(), matrix, false);
            mImage.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    从ImageView获取图像

    // ImageView对象(img)必须做如下设置后,才能获取其中的图像

    img.setDrawingCacheEnabled(true);

    // 获取ImageView中的图像

    bitmap = Bitmap.createBitmap(img.getDrawingCache());

    //从ImaggeView对象中获取图像后,要记得调用setDrawingCacheEnabled(false)清空画图缓

    //冲区,否则,下一次用getDrawingCache()方法回去图像时,还是原来的图像

    img.setDrawingCacheEnabled(false);

     

    展开全文
  • ImageView设置图片的几种方式

    万次阅读 2017-10-12 10:12:24
    ImageView设置图片的方式有很多种 一:在xml里面设置 设置前景:android:src=”@drawable/xxx” 设置背景:android:background=”@drawable/xxx” 二:在java里面的设置前景的方式 包括:setImageResource,...

    ImageView设置图片的方式有很多种

    一:在xml里面设置

              设置前景:android:src=”@drawable/xxx”

              设置背景:android:background=”@drawable/xxx”

     

    二:在java里面的设置前景的方式

           包括:setImageResource,setImageDrawable,setImageBitmap。

    在xml里面设置实际上和在java里面调用setImageResource是一样的,当然xml多了一个解析的过程,放到java代码里调用会稍微好些(实际没什么区别)。

     

    3种设置图片方式的区别:

    (1)setImageResource

    setImageResource的参数是resId,必须是drawable目录下的资源.另外,在setImageResource方法中有写明了注释

    * <pclass="note">This does Bitmap reading and decoding on the UI
    
    * thread, which can cause a latency hiccup.If that's a concern,
    
    * consider using {@link #setImageDrawable(android.graphics.drawable.Drawable)}or
    
    * {@link #setImageBitmap(android.graphics.Bitmap)} and
    
    * {@link android.graphics.BitmapFactory} instead.</p>

    这个方法是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟。所以如果顾虑到这个官方建议用setImageDrawable和setImageBitmap来代替。

    (2)setImageBitmap

    setImageBitmap参数是Bitmap,可以解析不同来源的图片再进行设置。不过我们看看setImageBitmap的源码:

    @android.view.RemotableViewMethod
    
    public void setImageBitmap(Bitmap bm) {
    
    // if this is used frequently, mayhandle bitmaps explicitly
    
    // to reduce the intermediate drawable object
    
    setImageDrawable(newBitmapDrawable(mContext.getResources(), bm));
    
    }

    实际上setImageBitmap做的事情就是把Bitmap对象封装成Drawable对象,然后调用setImageDrawable来设置图片。因此代码里面才写上了建议,如果需要频繁调用这个方法的话最好自己封装个固定的Drawable对象,直接调用setImageDrawable,这样可以减少Drawable对象。因为每次调用setImageBitmap方法都会对Bitmap对象new出一个Drawable。

    (3)setImageDrawable

    setImageDrawable参数是Drawable,也是可以接受不同来源的图片,方法中所做的事情就是更新ImageView的图片。上面两个方法实际上最后调用的都是setImageDrawable(setImageResource没有直接调用,不过更新的方法与setImageDrawable一样)。

    所以综合来看setImageDrawable是最省内存高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。

     

    setImageResource和setBackgroundResource的区别

    它们的原型如下:

    void android.widget.ImageView.setImageResource(int resId)
    void android.view.View.setBackgroundResource(int resid)

    区别是

    setImageResource与xml中的src的属性才是相匹配的, 而setBackgroundResource是与xml中的background属性相匹配的。

     

     

     

     

    展开全文
  • ImageView详解

    千次阅读 2019-03-25 13:48:11
    ImageView详解前言基本使用方法属性属性详解子类绘制原理关于ImageView可能会遇到的问题 前言 ImageView在官方的介绍上说是显示任意图像,如图标。ImageView类可以从各种来源(如资源或内容提供程序)加载图像,负责...
  • ImageView图片不显示

    千次阅读 2018-11-27 09:29:34
    今天写代码时,发现 ImageView 用 src 设置图片在部分手机不显示图片,下面是我的代码: &lt;ImageView android:id="@+id/iv_weChat" android:layout_width="match_parent" android:...
  • imageView = getView().findViewById(R.id.iv_code); private void code(){ //将ImageView中的图片转换成Bitmap imageView.buildDrawingCache(); Bitmap bitmap = imageView.getDrawingCache(); //...
  • ImageView设置图片的方式

    千次阅读 2019-03-31 20:51:33
    3种设置图片方式的区别: (1)setImageResource的参数是resId,必须是drawable目录下的资源.另外,在setImageResource方法中有写明了注释* <pclass=“note”>This does Bitmap reading and decoding on the UI* ...
  • ImageView.zip

    2015-11-03 14:20:13
    ImageView基础属性详解 详见博文http://blog.csdn.net/a87b01c14/article/details/49615689
  • ImageView 使用详解

    千次阅读 2019-06-20 17:11:42
    极力推荐文章:欢迎收藏Android 干货分享...一、ImageView 的继承关系 二、ImageView 常用方法 三、ImageView 背景 间距属性设置 四、使用Bitmap 类型动态设置ImageView 资源 五、ImageView 图片倒影实现 六、ImageV...
  • Android在ImageView上直接显示网络图片

    万次阅读 多人点赞 2017-08-16 18:33:19
    在原生的ImageView中,没有一个方法是可以直接显示网络的图片的,当我们经常需要显示网络图片时,每次都有一大堆的操作,这会很麻烦,今天就教大家在ImageView上轻松显示网络图片。 自定义ImageView方法 写一个类让...
  • 超简单的自定义ImageView,支持圆角和直角

    万次阅读 热门讨论 2018-01-25 15:19:25
    1、需求:ImageView显示的图片,上方的两个角是圆角,下方的两个角是直角。 2、这篇文章推荐了三种方式,我选择第三种ClipPath方式,这种方式很精简。 参考:https://www.jianshu.com/p/626dbd93207d 3、先来...
  • Android PowerImageView实现,可以播放动画的强大ImageView

    万次阅读 多人点赞 2013-10-25 08:36:03
    我个人是比较喜欢逛贴吧的,...我们都知道,在Android中如果想要显示一张图片,可以借助ImageView控件来完成,但是如果将一张GIF图片设置到ImageView里,它只会显示这张图片的第一帧,不会产生任何的动画效果。 那么
  • Android ImageView播放gif图片

    千次阅读 2018-11-19 08:59:04
    当点击图片的时候,gif图片播放,当没有点击的时候是gif的第一帧,这时是一张图片。 参考:... 首先在values目录下新建一个attrs.xml的文件 &lt;...xml version="......
  • android ImageView 播放动画

    千次阅读 2017-10-11 10:41:27
    最近要做一个loading的动画,刚开始使用gif图做,但是gif图效果不好,播放速度太慢,后来通过ImageView一帧一帧的播放,这里放过demo。 首先上几张图: Animation-List Animation-list是帧动画的默认选择,我们在...
  • ImageButton是可以放图片的按钮 使用background添加的图片会被拉伸,是背景图片。 使用src设置的图片不会被拉伸,是前景,以原图大小显示。 background和src可以同时设置; 给src设置缩放效果;仅用于src 使用...
  • 如何在ImageView里同时显示图片和文字甚至更复杂的内容你需要做的仅仅是引用一个drawable的工具类库,能满足以上所有需求. compile 'wu.seal:textwithimagedrawable:1.0.4'可以实现所有的图文混排的内容在一个...
  • 最近开发时,使用了最简单的Imageview,想将背景(或者src属性)设置为drawable下的某个资源。 然而在一台安卓4.4的机器上运行时闪退,报错 android.view.InflateException: Binary XML file line #0: Error ...
  • 概述最近在项目中遇到需要展示Gif图片的功能,我们知道原生ImageView是不支持播放Gif的,但是Android为我们提供了一个类可以实现该功能:android.graphics.Movie。
  • 初学者试着做iOS的界面,如果在main.storyboard里面改imageview的image属性为lenna.png 图片可以显示 但是如果用代码实现就什么效果也没有~: self.imgView.image = [UIImage imageNamed:@"lenna.png"]; 求问~~

空空如也

1 2 3 4 5 ... 20
收藏数 239,629
精华内容 95,851
关键字:

imageview