Android基础之ImageView

这篇博客主要介绍了Android中的ImageView组件,包括在XML和Java代码中如何使用,以及Bitmap和BitmapDrawable的区别和应用场景。还详细讲解了ImageView的scaleType属性,解释了不同值的效果,并提供了实例展示。
写在前面:

入门Android,学习的过程中视频,学习笔记都看了。可是自己会感觉到并没有学到东西(其实并不是)。学习了ImageView之后突然有了一丝丝的感觉。开心了许多。

第一次ImageView代码
package com.example.administrator.pictureview;

import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class PictureView extends AppCompatActivity {
    //创建一个images数组存放图片(图片复制到Drawable资源文件中即可)
    private int images[] = new int[]{
            R.drawable.timg,R.drawable.timg1,R.drawable.timg2,R.drawable.timg3
    };
    //声明定义一个变量begin表示当前显示的是哪个图片
    private int begin = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_picture_view);
        //获取一个Layout容器
        ConstraintLayout main = (ConstraintLayout) findViewById(R.id.main);
        //生成一个ImageView对象,并将其加入Layout
        final ImageView image = new ImageView(this);
        main.addView(image);
        //显示第一张图片
        image.setImageResource(images[begin]);
        //为ImageView设置一个监听器,点击图片就更新图片
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //显示下一张图片,并且能够实现周而复始                
                image.setImageResource(images[++begin % images.length]);
            }
        });

    }
}
知识点:

1.将Layout布局,控件在XML文件和Java源文件中结合起来实现。
2.图片资源的插入

第二次Imageview代码
package com.example.administrator.pictureview;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class PictureView extends AppCompatActivity {
    private int images[] = new int[]{
            R.drawable.timg,R.drawable.timg1,R.drawable.timg2,R.drawable.timg3
    };
    private int begin = 0;
    private int alpha = 255;
    private Button plus;
    private  Button minus;
    private  Button next;
    private  ImageView image1;
    private  ImageView image2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_picture_view);
        //实例化控件
        plus = (Button) findViewById(R.id.bt_plus);
        minus = (Button) findViewById(R.id.bt_minus);
        image2 = (ImageView) findViewById(R.id.image2);
        image1 = (ImageView) findViewById(R.id.image1);
        image1.setImageResource(R.drawable.timg);
        //为Next设置监听器,显示下一张图片
        next = (Button) findViewById(R.id.bt_next);
        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                image1.setImageResource(images[++begin % images.length]);
            }
        });
        //生成一个监听器,实现透明度的改变
        View.OnClickListener Listener = new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View v) {
            //判断点击的View是哪个(plus/minus)
                if (v == plus)
                {
                    alpha += 20;
                }
                if (v == minus)
                {
                    alpha -= 20;
                }
                //限制最值
                if (alpha >= 255)
                {
                    alpha = 255;
                }
                if (alpha < 0)
                {
                    alpha = 0;
                }
                //设置对应透明度
            image1.setImageAlpha(alpha);
            }
        };
        //将监听器设置在按钮
        plus.setOnClickListener(Listener);
        minus.setOnClickListener(Listener);
        //对图片生成一个OnTouchListener监听器(触摸),实现选取图片某个区域
        image1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                BitmapDrawable bitmapDrawable = (BitmapDrawable) image1.getDrawable();
                //获取第一个Imageview的位图
                Bitmap bitmap = bitmapDrawable.getBitmap();
                //Bitmap图片实际大小和Imageview的比例
                double scale = 1.0 * bitmap.getHeight() / image1.getHeight();
                //event.getX()获取触摸位置(相对于ImageView这个容器而非图片本身)
                int x = (int) (event.getX() * scale);
                int y = (int) (event.getY() * scale);
                if (x + 120 > bitmap.getWidth())
                {
                    x = bitmap.getWidth() - 120;
                }
                if (y + 120 >bitmap.getHeight())
                {
                    y = bitmap.getHeight() -120;
                }
                image2.setImageBitmap(Bitmap.createBitmap(bitmap,x,y,120,120));
                return false;
            }
        });
    }
}
效果展示:

这里写图片描述
这里写图片描述
这里写图片描述

知识点:

Bitmap继承Parcelable,是一个可以跨进程传输的对象,BitmapDrawable继承Drawable,可Drawable只是一个抽象类,此类是一个存放数据流的载体
1.使用情况:如果想绑定imageView之类的控件,两者都可以用,而想要将图片数据转换成其它对象,Bitmap功能更强大,而BitmapDrawable只是一个流的载体,所以一般获取src资源文件的时候用得多,而想要把资源图片截入到Bitmap需要转换后才可得到Bitmap对象。
2.BitmapDrawable就是封装了一个位图。直接以文件的方式,就是封装了一个原始的位图。以Xml方式,可以对原始的位图进行一系列的处理,比如说抗锯齿,拉伸,对齐等等。
3.要了解BitmapDrawable的使用,还需要明白Bitmap、BitmapFactory等类。Bitmap代表了一个原始的位图,并且可以对位图进行一系列的变换操作。BitmapFactory提供一系列的方法用于产生一个Bitmap对象。多用在Canvas中。
4.getX()、getY()返回的则是触摸点相对于View的位置。
5.getRawX()、getRawY()返回的是触摸点相对于屏幕的位置
5.ImageView有一个衍生类ImageButton,它不显示文字,而显示图片,拥有Button和ImageView大部分属性。
6.ImageView的scaleTape属性(适用于ImageButton):

android:scaleType值的意义区别:
CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽)
CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
FIT_XY / fitXY 把图片 不按比例 扩大/缩小到View的大小显示
附:简单的scaleType说明:
CENTER /center 在视图中心显示图片,并且不缩放图片
CENTER_CROP / centerCrop 按比例缩放图片,使得图片长 (宽)的大于等于视图的相应维度
CENTER_INSIDE / centerInside 按比例缩放图片,使得图片长 (宽)的小于等于视图的相应维度
FIT_CENTER / fitCenter 按比例缩放图片到视图的最小边,居中显示
FIT_END / fitEnd 按比例缩放图片到视图的最小边,显示在视图的下部分位置
FIT_START / fitStart 把图片按比例扩大/缩小到视图的最小边,显示在视图的上部分位置
FIT_XY / fitXY 把图片不按比例缩放到视图的大小显示
MATRIX / matrix 用矩阵来绘制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值