【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"><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");}}} }總結
以上是生活随笔為你收集整理的【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极验验证码流程-3.图片加密处理 图片移
- 下一篇: linux系统编程之文件与I/O(六):