使用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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time