【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】按钮又返回到左图的界面,可再次单击另一幅图。

image  image

本人不想再去找其他的图片了,所以仍然用前面章节示例中的图来演示。当然,你也可以将例子中这个两列的图改为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"><GridViewandroid: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"><ImageViewandroid: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" /><TextViewandroid: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"><ImageViewandroid:id="@+id/ch1102ImageView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:scaleType="centerCrop"android:layout_marginTop="20dp" /><TextViewandroid: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" /><TextViewandroid: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");}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html---textarea初始化时就有个table空格以及tab键操作无效

1 初始化时就有一个tab空格这是由于<textarea></textarea>之间的内容不为空的原因&#xff0c;包含空格和换行&#xff0c;否则浏览器会觉得空格或者换行都是文本域的内容。因此书写时需将<textarea></textarea>紧靠在一起。2 tab键对textarea操作无效…

android decorView详解

摘要 一、DecorView为整个Window界面的最顶层View。 二、DecorView只有一个子元素为LinearLayout。代表整个Window界面&#xff0c;包含通知栏&#xff0c;标题栏&#xff0c;内容显示栏三块区域。 三、LinearLayout里有两个FrameLayout子元素。 (20)为标题栏显示界面。只有一个…

3dmax批量导入obj_ArcGIS 与 3DMax 结合建模

整体技术思路是将项目区二维的CAD测绘底图&#xff0c;通过整理导入到3DMax中&#xff0c;根据CAD底图为基础&#xff0c;绘制三维数字模型。利用Photoshop 平面图像处理软件&#xff0c;对现场采集的照片进行修整&#xff0c;为三维模型制作表面贴图。最终把贴好材质的三维楼体…

字符串乘一个数_【思维拓展】三位数乘两位数,构造最大积和最小积

前面袁老师给大家讲了一个重要结论&#xff0c;并运用这个结论来解决问题&#xff0c;构造两位数乘两位数最大积和最小积的问题。今天&#xff0c;更进一步&#xff0c;三位数乘两位数中&#xff0c;如何构造最大积和最小的积&#xff1f;【问题引入】用9、8、6、5、4这五个数字…

ios 微信支付

服务器签名版本 官方已经是建议使用服务器签名来接入微信支付&#xff0c;实际上从安全上考虑&#xff0c;确实是每个客户端不应该知道RAS密钥&#xff0c;也不需要每个客户端都写一遍签名的算法。 服务端接入流程文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/app.…

macos可以升级到指定版本吗_承装承修承试可以跨级升级吗?

在建筑行业&#xff0c;通常我们所说的承装承修承试&#xff0c;也就是指承装(修、试)电力设施许可证。承装(修、试)电力设施许可证的功能作用相当于建筑资质&#xff0c;企业需要办理许可证后才能承接电力设施的安装、维护、调试等工程项目。承装(修、试)电力设施许可证可以办…

一个事物两个方面的对比举例_顶管施工也有讲究,两个方面一个个来

顶管施工其实就是我们平时说的不开挖或者非开挖施工啦&#xff0c;其原理是借助于主顶油缸及管道间、中继间等推力&#xff0c;把工具管或掘进机从工作坑内穿过土层一直推进到接收坑内吊起。管道紧随工具管或掘进机后&#xff0c;埋设在两坑之间。为了响应中央的号召&#xff1…

SQLServer中的死锁的介绍

简介 什么是死锁&#xff1f; 我认为&#xff0c;死锁是由于两个对象在拥有一份资源的情况下申请另一份资源&#xff0c;而另一份资源恰好又是这两对象正持有的&#xff0c;导致两对象无法完成操作&#xff0c;且所持资源无法释放。 什么又是阻塞&#xff1f; 阻塞是由于资源不…

解析取值_圆锥曲线——高中解析几何全归纳

这是一系列文章&#xff0c;我将在接下来了80多天&#xff0c;尽力把理科比较难的大题题型全部归纳一下然后在最后我会告诉做解析几何的窍门&#xff0c;让你的解析几何不再没有头绪&#xff0c;拿到既可做全文干货&#xff0c;不掺水&#xff0c;可以说总结了解析几何中你能遇…

Tomcat版本与Servlet、JSP等版本的支持关系

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/garyxiong/blog/624619

微服务架构会和分布式单体架构高度重合吗

在最近的Microservices Practitioner Summit峰会上&#xff0c;来自Facebook的工程师Ben Christensen就目前正在普遍快速增长的分布式系统与二进制依赖关系的一种反面模式发表了自己的看法。\\Christensen谈到说&#xff0c;共享类库是整个服务运行过程中最需要的部分&#xff…

北京soul_Soul高智商情侣,机器人博士邂逅科技记者,跨越1200公里来相爱

她&#xff0c;是知名媒体的科技记者&#xff0c;平时往返于帝都各大互联网媒体峰会上&#xff0c;朋友圈都是各大互联网公司创始人大佬&#xff0c;用文字记录下互联网江湖的风云变化。他&#xff0c;是魔都top大学的工业机器人博士&#xff0c;像谢尔顿一样充满科学的奇思妙想…

Android-Dialog

Android-AlertView 我的地址&#xff1a;https://github.com/kongqw/Android-AlertView 开源地址&#xff1a;https://github.com/saiwu-bigkoo/Android-AlertView

mysql卸载后重装失败_小筑教育BIM课堂-Revit100问 [第二期] | 软件卸载

1、Revit未卸载干净&#xff0c;导致安装失败&#xff0c;怎么办&#xff1f;答&#xff1a;方法1&#xff1a;利用官方软件卸载工具UninstallTool软件将剩余残留未卸载子程序卸载干净&#xff0c;之后再安装Revit。方法2&#xff1a;如果UninstallTool软件检索不到电脑上还有相…

hdu 5631 Rikka with Graph(图)

n个点最少要n-1条边才能连通&#xff0c;可以删除一条边&#xff0c;最多删除2条边&#xff0c;然后枚举删除的1条边或2条边&#xff0c;用并查集判断是否连通&#xff0c;时间复杂度为O&#xff08;n^3&#xff09; 这边犯了个错误&#xff0c; for(int i0;i<N;i){ fa[i]i;…

电机编码器调零步骤_蒂森电梯编码器整定和主机整定大全

CT 编码器整定操作步骤1. 断开电源&#xff0c;吊起轿厢&#xff0c;空开曳引轮钢丝绳。2. 取出主板 JP5 的 9 与 10.11.13 的线并短接一起。3. 送电后确认 KAS,KAD,继电器吸合&#xff0c;接触器 KM1,KM2,KM3 也吸合&#xff0c;抱闸自动张开。注&#xff1a;保证安全回路 102…

4 曝光_荣耀户外手表GS Pro曝光:超强续航 9月4日发布

8月21日消息&#xff0c;荣耀海外官微今日官宣&#xff0c;荣耀首款主打户外功能的手表&#xff0c;将于9月4日海外发布。从其预热海报来看&#xff0c;这款手表应该就是国内已官宣的荣耀GS Pro。因为两张海报中的手表新品外观一致&#xff0c;均采用三防设计&#xff0c;圆形表…

lightgbm 保存模型 过大_机器学习之12—Lightgbm

Lightgbm模型和GBDT以及XGboost一样&#xff0c;都是基于决策树的boosting集成模型&#xff1b;Lightgbm是一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。关于GBDT和XGboost的介绍可以参考&#xff1a;大饼&#xff1a;机器学习——提升算法(A…

python3 装饰器

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # encoding: utf-8 # author: eddy # contact: 278298125qq.com # site: http://my.oschina.net/eddylinux # file: study_deco.py # time: 2016-02-28 12:06 # version: 1.0#基础知识 #### 第一…

判断是否大于_电动车是否属于机动车的辩论要点

现行国家标准GB/T 24158-2009在3.1章节中对电动摩托车与电动轻便摩托车进行了定义,但将要在2019年4月1日实施的新标准却删除了该定义.在09标准中对电动轻便摩托车进行了如下定义:所以说,大于20km/h或大于40kg的电动车为机动车.但是这个标准删除了故对于电动车是否属于机动车不应…