Android基础之ImageView

来源:互联网 发布:新零售软件 编辑:程序博客网 时间:2024/06/08 04:27

写在前面:

入门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 用矩阵来绘制

原创粉丝点击