imageview_imageview手势缩放 - CSDN
精华内容
参与话题
  • 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设置图片的方式

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

    千次阅读 2017-11-25 14:46:00
    转自:...本节介绍的UI基础控件是:ImageView(图像视图),见名知意,就是用来显示图像的一个View或者说控件! 官方API:ImageView;本节讲解的内容如下: ImageView的src属性和blackground的区别;
  • ImageView的几种对图片的缩放处理

    千次阅读 2017-03-04 13:37:19
    ImageView的scaleType的属性有好几种,分别是matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY android:scaleType="center"  保持原图的大小,显示在...
  • ImageView 设置图片

    千次阅读 2018-11-03 21:20:01
    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;... android doc
  • 在布局文件中有一个空的ImageView,现在我想动态放进一个图片: TextView txt = (TextView) findViewById(R.id.textView1); txt.setText("my text"); 有没有类似设这TextView方法的: ImageView image ...
  • ImageView 使用详解

    千次阅读 2019-06-20 17:11:42
    极力推荐文章:欢迎收藏Android 干货分享...一、ImageView 的继承关系 二、ImageView 常用方法 三、ImageView 背景 间距属性设置 四、使用Bitmap 类型动态设置ImageView 资源 五、ImageView 图片倒影实现 六、ImageV...
  • 超简单的自定义ImageView,支持圆角和直角

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

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

    万次阅读 多人点赞 2017-08-04 14:05:15
    ImageView的scaleType的属性值有MATRIX,FIT_XY,FIT_START,FIT_END,FIT_CENTER,CENTER,CENTER_CROP,CENTER_INSIDE.1.android:scaleType=“center” 保持原图的大小,显示在ImageView的中心。当原图的size大于...
  • Android PowerImageView实现,可以播放动画的强大ImageView

    万次阅读 多人点赞 2013-10-25 08:36:03
    我个人是比较喜欢逛贴吧的,...我们都知道,在Android中如果想要显示一张图片,可以借助ImageView控件来完成,但是如果将一张GIF图片设置到ImageView里,它只会显示这张图片的第一帧,不会产生任何的动画效果。 那么
  • 在camera picture上有一个动态的imageview,现在我想在我选择的 imageview上设置刻度标记,在下面代码的基础上再如何修改呢? @Override protected void onCreate(Bundle savedInstanceState) { super....
  • ImageView

    千次阅读 2013-11-15 15:32:21
    ImageView,图像视图,直接继承自View类,它的主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中,并且Android为其提供了缩放和...
  • ImageView 用法总结

    千次阅读 2011-09-06 19:18:07
    结构 继承关系 public class View.OnClickListner extends View   java.lang.Object android.view.View android.widget.ImageView   直接子类 Image
  • Android基础入门教程——2.3.4 ImageView(图像视图) 本节引言: 1.src属性和background属性的区别: 1)写代码验证区别: 2)解决blackground拉伸导致图片变形的方法 3)设置透明度的问题 4)两者结合妙用: 5)Java代码中...
  • 许久以前,在我还是初中的时候,有过一个当网络小说家的梦想,谁知到如今,却成一个程序员。享受生活,享受现在,做一个写博客的程序员,也算是了却当初的半个梦想。  ...
1 2 3 4 5 ... 20
收藏数 237,401
精华内容 94,960
关键字:

imageview