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 用矩阵来绘制
- Android基础之ImageView
- Android基础控件之ImageView
- Android基础之imageview截图
- Android初级之组件基础04-ImageView
- 【android基础】之ImageView xml详解
- Android 基础之ImageView的scaleType
- Android基础:button imageview
- Android基础控件 - ImageView
- 【Android 基础】自定义ImageView
- Android基础UI之ImageView宽度设定,高度自适应
- android之ImageView
- Android之ImageView
- android之ImageView
- Android之ImageView
- Android 之 ImageView 示例
- android控件之imageView
- android之ImageView .
- Android之ImageButton、ImageView
- 【Python】生成器和杨辉三角
- HDU-1421 搬寝室 (线性dp 好题)
- TheInternet's own boy:Aaron Swartz
- 【Java 设计模式】接口型模式--Adapter(适配器)模式
- c#继承
- Android基础之ImageView
- scikit-learn sklearn 0.18 官方文档中文版
- java链接mysql数据库写登录实例
- C++plus 笔记3
- 10分钟一题剑指OFFER-替换空格
- 输出一个三位数的个,十,百位,并求和.
- html5中表格的各种属性以及应用详细介绍
- Add Two Numbers
- Oracle数据库导出和导入