【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现
分类:C#、Android、VS2015;
创建日期:2016-02-21
一、简介
实际上,对于布局文件中的View来说,大多数情况下,Android都会自动保存这些状态,并不需要我们都去处理它。这一节仍以GridView为例(第10章已经介绍过其基本用法了),说明屏幕旋转以及场景切换过程中用GridView呈现的图像是如何自动变换的。
本节主要关注下面的问题:
(1)如何通过GridView显示多幅图像。
(2)如何使用Activity从一个活动切换到另一个活动,即利用Activity实现场景转换的功能,将GridView网格图像的Acivity过渡到大图像的Activity。
(3)当用户触摸或单击GridView中的每幅图片时,如何立即切换到该图片对应的详细信息描述页;当用户单击屏幕下方左侧的那个【Back】按钮时,又返回到用GridView显示多幅图像的页面。
二、示例—ch1103GridViewSceneTransition
1、运行截图
下面左图为在GridView显示两列图像的效果,右图为单击【3、穿衣的小狗】后显示的效果。按右图下方左侧的【Back】按钮又返回到左图的界面,可再次单击另一幅图。
本人不想再去找其他的图片了,所以仍然用前面章节示例中的图来演示。当然,你也可以将例子中这个两列的图改为3列、4列、……,同时将界面改为任何你希望实现的功能。
2、实现步骤
(1)添加ch1103_GridViewSceneTransitionMain.axml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<GridView
android:id="@+id/gridview1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:horizontalSpacing="2dp"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="2dp"
android:layout_gravity="center"
android:minWidth="25dp"
android:minHeight="25dp"
android:drawSelectorOnTop="true"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp" />
</LinearLayout>
(2)添加ch1103_Item.axml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:outlineProvider="bounds">
<ImageView
android:id="@+id/ch1102ImageViewItem"
android:layout_width="90dp"
android:layout_height="90dp"
android:scaleType="centerCrop"
android:minHeight="25dp"
android:minWidth="25dp"
android:layout_gravity="center_horizontal" />
<TextView
android:id="@+id/ch1102TextViewItemTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:layout_gravity="center_horizontal"
android:minWidth="25dp"
android:textSize="10dp" />
</LinearLayout>
(3)添加ch1103_Detail.axml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/ch1102ImageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:layout_marginTop="20dp" />
<TextView
android:id="@+id/ch1102TextViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:maxLines="1"
android:layout_gravity="center_horizontal"
android:textColor="#FF0000" />
<TextView
android:id="@+id/ch1102TextViewDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:padding="16dp" />
</LinearLayout>
(4)添加ch1103GridViewSceneTransitionMain.cs文件
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Views;
using Android.Widget; namespace MyDemos.SrcDemos
{
[Activity(Label = "【例11-3】场景转换")]
public class ch1103GridViewSceneTransitionMain : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ch1103_GridViewSceneTransitionMain);
var gridview = FindViewById<GridView>(Resource.Id.gridview1);
var adapter = new ch1102MyImageAdapte(this);
gridview.Adapter = adapter;
gridview.ItemClick += (s, e) =>
{
var item = adapter[e.Position];
Intent intent = new Intent(this, typeof(ch1103DetailActivity));
intent.PutExtra("id", item.ImageId);
intent.PutExtra("title", item.Title);
intent.PutExtra("desc", item.Desc);
StartActivity(intent);
};
}
} /// <summary>
/// 这里仅以小狗图为例说明基本用法,这样做主要是为了不让例子过于复杂,
/// 实际上,你可以将小狗图改为景点图、大楼图、交通图、功能模块图、……等。
/// </summary>
class ch1103Item
{
/// <summary>
/// 图片ID
/// </summary>
public int ImageId { get; set; }
/// <summary>
/// 图片的标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 对该图片的描述
/// </summary>
public string Desc { get; set; }
}
class ch1102MyImageAdapte : BaseAdapter<ch1103Item>
{
Activity context; public ch1102MyImageAdapte(Activity context)
{
this.context = context;
} private static List<ch1103Item> items = new List<ch1103Item>()
{
new ch1103Item {ImageId=Resource.Drawable.ch05sample_0,
Title="1、迷茫的小狗", Desc ="哇,迷路了,该往哪走呢?" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_1,
Title="2、耍赖的小狗", Desc ="你就是躺到那也不让你吃。" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_2,
Title="3、穿衣的小狗", Desc ="过年了,给小狗穿个花衣服。" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_3,
Title="4、小狗和女友", Desc ="狗狗,后面是你女朋友吗?" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_4,
Title="5、悲催的小狗", Desc ="这个图片很悲催。" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_5,
Title="6、看门的小狗", Desc ="好好看门,别让贼进来了。" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_6,
Title="7、卖萌的小狗", Desc ="狗狗的沙发很给力啊。" },
new ch1103Item {ImageId=Resource.Drawable.ch05sample_7,
Title="8、愤怒的小狗", Desc ="谁惹你了,眼瞪这么大。" },
}; public override ch1103Item this[int position]
{
get { return items[position]; }
} public override int Count
{
get { return items.Count; }
} public override long GetItemId(int position)
{
return items[position].ImageId;
} public override View GetView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = context.LayoutInflater.Inflate(Resource.Layout.ch1103_Item, parent, false);
}
ch1103Item item = this[position];
ImageView imageView = convertView.FindViewById<ImageView>(Resource.Id.ch1102ImageViewItem);
imageView.SetImageResource(item.ImageId);
TextView title = convertView.FindViewById<TextView>(Resource.Id.ch1102TextViewItemTitle);
title.Text = item.Title;
return convertView;
}
}
}
(5)添加ch1103DetailActivity.cs文件
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget; namespace MyDemos.SrcDemos
{
[Activity(Label = "【例11-3】场景转换")]
public class ch1103DetailActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ch1103_Detail);
int imgId = Intent.GetIntExtra("id", -1);
if (imgId != -1)
{
var imageView = FindViewById<ImageView>(Resource.Id.ch1102ImageView1);
imageView.SetImageResource(imgId);
var title = FindViewById<TextView>(Resource.Id.ch1102TextViewTitle);
title.Text = Intent.GetStringExtra("title");
var desc = FindViewById<TextView>(Resource.Id.ch1102TextViewDesc);
desc.Text = Intent.GetStringExtra("desc");
}
}
}
}
【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现的更多相关文章
- Android 7.1 屏幕旋转流程分析
Android 7.1 屏幕旋转流程分析 一.概述 Android屏幕的旋转在framework主要涉及到三个类,结构如图 PhoneWindowManager:为屏幕的横竖屏转换的管理类. Wi ...
- Qt for Android 程序禁止屏幕旋转
有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...
- 设置Android默认锁定屏幕旋转
/********************************************************************************** * 设置Android默认锁定屏 ...
- 【opengl】OpenGL中三维物体显示在二维屏幕上显示的变换过程
转自:http://blog.sina.com.cn/s/blog_957b9fdb0100zesv.html 为了说明在三维物体到二维图象之间,需要经过什么样的变换,我们引入了相机(Camera)模 ...
- Loadrunner脚本回放 场景运行过程中常见错误分析
问题一:Loadrunner超时错误问题描述 Loadrunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同. 问题现象Error -27728: ...
- Android上禁止屏幕旋转
看网上讲了很多,设置很多属性,设置了很多,其实最关键的一点是这个 @Overrideprotected void onResume() { /** * 设置为横屏 */ if(getRequested ...
- Android 7.1 WindowManagerService 屏幕旋转流程分析 (二)
一.概述 从上篇[Android 7.1 屏幕旋转流程分析]知道实际的旋转由WindowManagerService来完成,这里接着上面具体详细展开. 调了三个函数完成了三件事,即首先调用update ...
- 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置
1.1概述 Android4.0,Androd4.4源代码能够编译成手机模式和平板模式,讯为iTop4412 开发平台 的Android系统默认编译为平板模式.客户须要依据自己的产品设计及应用环境,切 ...
- Android Studio使用过程中常见问题及解决方案
熟悉Android的童鞋应该对Android Studio都不陌生.Android编程有两个常用的开发环境,分别是Android Studio和Eclipse,之前使用比较多的是Eclipse,而现在 ...
随机推荐
- Opencv2.4.9安装和在visualstudio 2013中配置
Opencv2.4.9安装和在visualstudio 2013中配置 下载opencv和在windows下安装: 最新版本号的opencv是2014.4.25的opencv2.4.9,这里选择当前最 ...
- UML 之 数据流图(DFD)
数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能.数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工 ...
- Java从零开始学三十八(JAVA IO- 重定向IO)
一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...
- Effective C++ 38-42
38.绝不要又一次定义继承而来的缺省參数值. 又一次定义函数缺省參数值意味着又一次定义函数.而非虚函数不能又一次定义,所以将就考虑不能又一次定义虚函数的缺省參数值的原因:虚函数是动态绑定的而缺省參数值 ...
- 算法笔记_193:历届试题 连号区间数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是: 如果区间[L, R ...
- xcode 打包
iOS的要安装Xcode,否则执行下面命令的时候报错 ionic platform add ios ionic build ios ionic emulate ios 方法二: 1.打开终端 -- b ...
- SAP SQ01怎样从开发机传输到生产机
确认你的Query是本地的还是全局的(跨Client).假设是后者,会自己主动生成传输请求,用标准传输方式就可以. 假设是本地的Query,有两种方式: 方式1:复制成全局的,让后生成传输请求 方式2 ...
- 简单说说Ubuntu利用bzr源码安装OpenERP7.0的操作步骤
1.修改Ubuntu国内更新源,具体方法自己baidu.google. 修改更新源后,更新系统 sudo apt-get update sudo apt-get upgrade 复制代码 2.安装Po ...
- __str__被print函数调用,目的是打印类的内容到屏幕上
# -*- coding: utf-8 -*- #python 27 #xiaodeng #__str__被print函数调用,目的是打印类的内容到屏幕上 class APIError(): def ...
- rlwrap插件,实现sqlplus上下翻页
oracle在Linux下,sqlplus中不能上下翻,最主要我经常打错字!嘿嘿 01.下载 RPM :http://rpmfind.net/linux/rpm2html/search.php?qu ...