使用View实现相册照片列表页面

2024-08-21 16:32

本文主要是介绍使用View实现相册照片列表页面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 View概述

1.1 View

View表示视图,负责提供绘制和事件处理的方法。View类及其子类的相关属性,既可以在xml布局文件中设置,也可以通过成员方法动态设置。
View类常用的属性及方法如表1:

xml属性

成员方法

描述

android:background

setBackgroundResource(int)

设置背景

android:clickable

setClickable(boolean)

设置是否响应单击事件

android::elevation

setElevation(float)

设置z轴深度

android:focusable

setFocusable(boolean)

设置是否可以获取焦点

android:id

setId(int)

设置组件唯一标识符ID

android:longClickable

setLongClickable(boolean)

设置是否响应长单击事件

android:minHeight

setMinimumHeight(int)

设置最小高度

android:minWidth

setMinimumWidth(int)

设置最小宽度

android:padding

setPaddingRelative(int,int,int,int)

设置4个边的内边距

android:paddingBottom

setPaddingRelative(int,int,int,int)

设置底边的内边距

android:paddingTop

setPaddingRelative(int,int,int,int)

设置顶边的内边距

android:paddingStart

setPaddingRelative(int,int,int,int)

设置左边的内边距

android:paddingEnd

setPaddingRelative(int,int,int,int)

设置右边的内边距

android:paddingLeft

setPadding(int,int,int,int)

设置左边的内边距

android:paddingRight

setPadding(int,int,int,int)

设置右边的内边距

android:visibility

setVisibility(int)

设置View的可见性

表1 View类常用的xml属性及对应的方法

1.2 ViewGroup

ViewGroup是一个抽象类,实际用ViewGroup的子类,如后面的布局管理器。
(1)ViewGroup.LayoutParams
封装了布局的位置,高和宽。

xml属性

描述

android:layout_height

android:layout_width

参数可以使用精确的数值,或

FILL_PARENT,MATCH_PARENT(表示与父容器相同)

WRAP_CONTENT(表示包裹其自身的内容)

(2)ViewGroup.MarginLayoutParams
用于控制其子组件的外边距。它支持的常用属性如表2:

xml属性

描述

android:layout_marginBottom

设置底外边距

android:layout_marginTop

设置顶外边距

android:layout_marginStart

设置左外边距(Android4.2)

android:layout_marginEnd

设置右外边距(Andriod4.2)

android:layout_marginLeft

设置左外边距

android:layout_marginRight

设置右外边距

表2 ViewGroup.MarginLayoutParams支持的常用属性
ViewGroup中除了可以包含View,还可以再次包含ViewGroup,这应用了组合设计模式(Composite design),如图3:

图3 View层次结构

2 控制UI界面

2.1 使用xml布局文件控制

(1)创建xml布局文件
(2)代码调用

setContentView(R.layout.activity_main);

2.2 使用代码控制

(1)创建布局管理器,如帧布局管理器等。
(2)创建具体的组件,如TextView等。
(3)将创建的组件添加到布局管理器中。

2.3 使用xml布局文件和代码控制

通常把变化小的组件放在xml布局文件中,把变化大的组件用代码控制。

2.4 使用自定义View控制

我们可以继承View来开发自己的View组件。
(1)创建View子类,重写构造方法。
(2)根据需要重写其他方法。
(3)创建并实例化自定义View类,并将其添加到布局管理器中。

3 布局管理器

(1)相对布局管理器
通过相对定位的方式来控制组件的位置。
(2)线性布局管理器
在垂直或水平方向依次摆放组件。
(3)帧布局管理器
所有的组件会摆放在左上角,逐个覆盖。
(4)表格布局管理器
使用表格的方式按行,列来摆放组件。
(5)网格布局管理器
可以实现跨行或跨列摆放组件。
布局管理器类图如图4:

 图4 布局管理器类图

3.1 相对布局管理器

<RelativeLayout>标记基本语法:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"属性列表
>
</RelativeLayout>

RelativeLayout支持的xml属性如表5:

xml属性

描述

android:gravity

设置布局管理器中各子组件的对齐方式

android:ignoreGravity

指定哪个组件不受gravity的影响

表5 RelativeLayout支持的xml属性
RelativeLayout.LayoutParams支持的xml属性如表6:

xml属性
描述
android:layout_above
指定该组件位于那个组件的上方
android:layout_below
指定该组件位于那个组件的下方
android:layout_alignBottom
指定该组件与哪个组件的下边界对齐
android:layout_alignTop
指定该组件与哪个组件的上边界对齐
android:layout_alignLeft
指定该组件与哪个组件的左边界对齐
android:layout_alignRight
指定该组件与哪个组件的右边界对齐
android:layout_alignParentBottom
指定该组件是否与布局管理器底端对齐
android:layout_alignParentTop
指定该组件是否与布局管理器顶端对齐
android:layout_alignParentLeft
指定该组件是否与布局管理器左边对齐
android:layout_alignParentRight
指定该组件是否与布局管理器右边对齐
android:layout_centerHorizontal
指定该组件是否位于布局管理器水平居中的位置
android:layout_centerInParent
指定该组件是否位于布局管理器的中央位置
android:layout_centerVertical
指定该组件是否位于布局管理器垂直居中的位置
android:layout_toLeftOf
指定该组件位于哪个组件的左侧
android:layout_toRightOf
指定该组件位于哪个组件的右侧

表6 RelativeLayout.LayoutParams

3.2 线性布局管理器

纵向排列的称为垂直线性布局管理器,横向排列的称为水平线性布局管理器。
<LinearLayout>标记的基本语法格式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"属性列表
>
</LinearLayout>

LinearLayout支持的常用xml属性如表7:

xml属性

描述

android:orientation

设置排列方式

android:gravity

设置组件显式位置

android:background

设置背景

表7 LinearLayout支持的常用xml属性

3.3 帧布局管理器

在帧布局管理器中,每加入一个组件,都将创建一个空白的区域,称为一帧。这些帧会被放置在屏幕的左上角,即帧布局是从屏幕的左上角(0,0)开始布局。多个组件层叠排序,后面的组件覆盖前面的组件。
<FrameLayout>标记的基本语法格式:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"属性列表
>
</FrameLayout>

FrameLayout支持的常用xml属性如表8:

xml属性
描述
android:foreground
设置该帧布局容器的前景图像
android:foregroundGravity
设置前景图像的显示位置

表8 FrameLayout支持的常用xml属性

3.4 表格布局管理器

在表格布局管理器中,可添加多个<TableRow>标记,每个<TableRow>标记占用一行。
在表格布局管理器中,列可以被隐藏,也可以被设置伸展,还可以设置强制收缩。
<TableLayout>基本语法格式如下:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"属性列表
><TableRow 属性列表> 需要添加的组件 </TableRow>...
</TableLayout>

TableLayout继承自LinearLayout,除了支持LinearLayout的xml属性,还支持下表9的xml属性:

xml属性
描述
android:collapseColumns
设置被隐藏的列的列序号
android:shrinkColumns
设置被收缩的列的列序号
android:stretchColumns
设置被拉伸的列的列序号

表9 TableLayout支持的xml属性

3.5 网格布局管理器

网格布局管理器中,屏幕被虚拟的细线划分为行,列和单元格,每个单元格放置一个组件,却这个组件可以跨行或跨列摆放。
<GridLayout>标记的基本语法格式如下:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"属性列表
>
</GridLayout>

GridLayout支持的xml属性如表10:

xml属性
描述
android:columnCount
指定网格的最大列数
android:rowCount
指定网格的最大行数
android:orientation
指定排列方式
android:alignmentMode
指定对齐模式

表10 GridLaytout支持的xml属性
GridLayout.LayoutParams支持的xml属性如表11:

xml属性
描述
android:layout_gravity
设置组件显式位置
android:layout_column
指定该子组件位于网格的第几列
android:layout_columnSpan
指定该子组件横向跨几列
android:layout_columnWeight
指定子组件在水平方向上的权重
android:layout_row
指定该子组件位于网格的第几行
android:layout_rowSpan
指定该子组件纵向跨几行
android:layout_rowWeight
指定子组件在垂直方向上的权重

表11 GridLayout.LayoutParams支持的xml属性
网格布局管理器与表格布局管理器的区别如下:
(1)网格布局管理器可以跨行或跨列,表格布局管理器只能跨列。
(2)网格布局管理器可以实现一行占满后的组件自动换行,表格布局管理器超出的组件不会被显式。

4 使用View实现相册照片列表页面

PhotosView:
MainActivity.java:

public class MainActivity extends AppCompatActivity {private  ImageView[] img=new ImageView[12];private int[] imagePath=new int[]{R.mipmap.img01,R.mipmap.img02,R.mipmap.img03,R.mipmap.img04,R.mipmap.img05,R.mipmap.img06,R.mipmap.img07,R.mipmap.img08,R.mipmap.img09,R.mipmap.img10,R.mipmap.img11,R.mipmap.img12};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);GridLayout layout=(GridLayout)findViewById(R.id.layout);for(int i=0;i<imagePath.length;i++){img[i]=new ImageView(MainActivity.this);img[i].setImageResource(imagePath[i]);img[i].setPadding(2, 2,2, 2);// 设置图片的宽度和高度ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(232,136);// 为ImageView组件设置布局参数img[i].setLayoutParams(params);// 将ImageView组件添加到布局管理器中layout.addView(img[i]);}}
}

https://github.com/hanyuhang-hz/android-demos

这篇关于使用View实现相册照片列表页面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093682

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当