Widget简单组件 图片视图(ImageView)

ImageView

ImageView继承自View组件,主要用于显示图像资源(例如图片等), ImageView还可以定义所显示的尺寸等。此外, ImageView还派生了ImageButton, ZoomButton等组件。Image View所支持的XML属性和方法如下表所示。

ImageView的XML属性及方法

XML属性 对应方法 功能描述
android:adjust ViewBounds setAdjust ViewBounds( boolean) 是否保持宽高比。需要与maxWidth 、 MaxHeight一起使用,单独使用没有效果
android :cropToPadding setCropToPadding( boolean) 截取指定区域是否使用空白代替。单独设置无效果,需要与scrollY一起使用
android: maxHeight setMaxHeight(int) 设置View的最大高度,单独使用无效,需要与setAdjustViewBounds()方法一起使用。如果想设置图片固定大小,又想保持图片宽高比,需要如下设置:设置setAdjust ViewBounds 为true;设置max Width和 MaxHeight属性;设置layout_ width和 layout_height均为wrap_content
android :max Width setMax Width(int) 设置View的最大宽度。用法同android :maxHeight
android :src setImageResource(int) 设置Image View所显示的 Drawable对象
android :scaleType setScaleType ( Image View.ScaleType) 设置所显示的图片如何缩放或移动以适应Image View的大小

ImageView的android : scaleType属性可以指定如下属性值

  • matrix:用矩阵来绘图。
  • fitXY:拉伸图片(不按比例)以填充View的宽高。
  • fitStart:按比例拉伸图片,图片拉伸后的高度为View的高度,且显示在 View 的左边。
  • fitCenter:按比例拉伸图片,图片拉伸后的高度为View 的高度,且显示在View 的中间。
  • fitEnd:按比例拉伸图片,图片拉伸后的高度为View 的高度,且显示在View 的右边。
  • center:按原图大小显示图片,当图片宽高大于 View的宽高时,截图图片中间部分显示。
  • centerCrop:按比例放大原图,直至等于View某边的宽高。
  • centerInside:当原图宽高等于View的宽高时,按原图大小居中显示﹔反之将原图缩放至 View的宽高居中显示。

此外.为了控制ImageView所显示的图片,该组件提供了如下方法

  • sctlmageBitmap(Bitmap):使用Bitmap位图来设置ImageView所显示的图片。
  • setImageDrawable( Drawable):使用Drawable对象来设置ImageView所显示的图片。
  • setImageResource(int):使用图片资源ID来设置ImageView所显示的图片。
  • setImagURI(Uri):使用图片的URI来设置ImageView所显示的图片。

代码演示

下面通过一个简单示例演示 ImageView的使用。通过单击“下一页/上一页”按钮,实现图片的切换

在这里插入图片描述

在这里插入图片描述

对应的布局文件代码如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical"
    >
    <!-- 图片及文字 1 -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/photoImageView"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="30dp"
            android:background="@android:color/white"
            android:scaleType="fitCenter"
            android:src="@drawable/one" />
        <TextView
            android:id="@+id/photoTxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="佐佐木希" />
    </LinearLayout>
    <!-- 分页 2 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">
        <ImageButton
            android:id="@+id/backImageBtn"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginLeft="140dp"
            android:layout_gravity="fill_vertical"
            android:src="@drawable/back"/>
        <ImageButton
            android:id="@+id/forwardImageBtn"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="fill_vertical"
            android:src="@drawable/forward" />
    </LinearLayout>
</LinearLayout>

代码解释如下:标号1处定义了一个 ImageView组件,用来显示图片,通过设置android; scaleType= " fitCenter"属性,使用拉伸后图片的高度作为View的高度,且在View的中间显示,同时还定义了一个TextView组件用来显示图片的名字;标号2处定义了两个ImageButton组件,分别用于显示“上一页”和“下一页”的图片。

下面在Activity 中演示图片分页效果:当用户分别单击“上一页/下一页”按钮时,在屏幕上会显示相应的图片

在这里插入图片描述

在这里插入图片描述
对应的Activity 代码实现如下所示

package com.qst.demo2;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class ImageViewDemoActivity extends AppCompatActivity {
    
    
    //定义变量 1
    //图片对应的ImageView
    ImageView flagImageView;
    TextView flagTxt;
    ImageButton backImgeBtn;   //上一页
    ImageButton forwardImageBtn; //下一页
    //图片数组   2
    int [] flag = {
    
    R.drawable.one, R.drawable.two, R.drawable.three};
    String[] flagNames = {
    
    "佐佐木希", "胡歌", "霉霉"};
    //当前页 默认第一页
    int currentPage = 0;
    @Override //重写方法
    public void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState); //调用父类onCreate创建Activity
        setContentView(R.layout.imageview_demo); //设置布局
        //初始化组件 3
        flagImageView = (ImageView) findViewById(R.id.photoImageView);
        flagTxt = (TextView) findViewById(R.id.photoTxt);
        //上一页,下一页
        backImgeBtn = (ImageButton) findViewById(R.id.backImageBtn);
        forwardImageBtn = (ImageButton) findViewById(R.id.forwardImageBtn);
        //注册监听器
        backImgeBtn.setOnClickListener(onClickListener);
        forwardImageBtn.setOnClickListener(onClickListener);
    }
    //定义单击事件监听器 4
    private View.OnClickListener onClickListener = new View.OnClickListener() {
    
     //创建对象
        @Override   //重写接口方法
        public void onClick(View v) {
    
    
            switch (v.getId()) {
    
    
                case R.id.backImageBtn:
                    if (currentPage == 0) {
    
    
                        Toast.makeText(ImageViewDemoActivity.this,
                                "第一页,前面没有了", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    //上翻一页
                    currentPage--;
                    //设置图片
                    flagImageView.setImageResource(flag[currentPage]);
                    //设置图片名字
                    flagTxt.setText(flagNames[currentPage]);
                    break;
                case R.id.forwardImageBtn:
                    if (currentPage == (flag.length-1)) {
    
    
                        Toast.makeText(ImageViewDemoActivity.this,
                                "最后一页,后面没有了", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    currentPage++;   //下翻一页
                    flagImageView.setImageResource(flag[currentPage]);  //设置图片
                    flagTxt.setText(flagNames[currentPage]);  //设置图片名字
                    break;
                default:
                    break;
            }
        }
    };
}

代码解释如下:标号1处分别声明了ImageView类型和ImageButton类型的属性变量;标号2处定义了两个数组并进行初始化,分别表示图片资源和图片名称﹔标号3处用于初始化标号1处所声明的属性变量,并对backImageBtn和forwardImageBtn对象设置监听器,来监听各自的单击事件﹔标号4处定义了一个OnClickListener类型的监听器,用于处理按钮单击事件,当单击按钮时根据所单击的按钮不同来显示不同的图片和图片名称。

在AndroidMainfest.xml清单文件中声明Activity
在这里插入图片描述在这里插入图片描述

运行Activity代码后,效果如下图
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42768634/article/details/115286176