zoukankan      html  css  js  c++  java
  • Android控件之GridView探究

    GridView是一项显示二维的viewgroup,可滚动的网格。一般用来显示多张图片。

    以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接。

    目录结构

    main.xml布局文件,存放GridView控件

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    android:numColumns
    ="auto_fit" ,GridView的列数设置为自动
    android:columnWidth
    ="90dp",每列的宽度,也就是Item的宽度
    android:stretchMode
    ="columnWidth",缩放与列宽大小同步
    android:verticalSpacing
    ="10dp",两行之间的边距,如:行一(NO.0~NO.2)与行二(NO.3~NO.5)间距为10dp
    android:horizontalSpacing
    ="10dp",两列之间的边距
    -->
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id
    ="@+id/gridview"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent"
    android:numColumns
    ="auto_fit"
    android:verticalSpacing
    ="10dp"
    android:horizontalSpacing
    ="10dp"
    android:columnWidth
    ="90dp"
    android:stretchMode
    ="columnWidth"
    android:gravity
    ="center"
    />

    night_item.xml布局文件,存放显示控件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android
    ="http://schemas.android.com/apk/res/android"
    android:layout_height
    ="wrap_content"
    android:paddingBottom
    ="4dip"
    android:layout_width
    ="fill_parent">
    <ImageView android:layout_height="wrap_content"
    android:layout_width
    ="wrap_content"
    android:layout_centerHorizontal
    ="true"
    android:id
    ="@+id/itemImage" >
    </ImageView>
    <TextView android:layout_width="wrap_content"
    android:layout_below
    ="@+id/itemImage"
    android:layout_height
    ="wrap_content"
    android:text
    ="TextView01"
    android:layout_centerHorizontal
    ="true"
    android:id
    ="@+id/itemText">
    </TextView>
    </RelativeLayout>

    strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="hello">Hello World, GvActivity!</string>
    <string name="app_name">九宫图</string>
    <string name="test_name1">跳转到TestActivity1</string>
    <string name="test_name2">跳转到TestActivity2</string>
    <string name="test_name3">跳转到TestActivity3</string>
    </resources>

    清单文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ljq.gv"
    android:versionCode
    ="1"
    android:versionName
    ="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".GvActivity"
    android:label
    ="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity android:name=".TestActivity1" android:label="@string/test_name1"/>
    <activity android:name=".TestActivity2" android:label="@string/test_name2"/>
    <activity android:name=".TestActivity3" android:label="@string/test_name3"/>
    </application>
    <uses-sdk android:minSdkVersion="7" />

    </manifest>

    跳转类TestActivity1、TestActivity2、TestActivity3

    package com.ljq.gv;

    import android.app.Activity;
    import android.os.Bundle;

    public class TestActivity1 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);
    }
    }

    package com.ljq.gv;

    import android.app.Activity;
    import android.os.Bundle;

    public class TestActivity2 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);
    }
    }

    package com.ljq.gv;

    import android.app.Activity;
    import android.os.Bundle;

    public class TestActivity3 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);
    }
    }

    类GvActivity

    package com.ljq.gv;

    import java.util.ArrayList;
    import java.util.HashMap;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.GridView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;

    public class GvActivity extends Activity {
    private String texts[] = null;
    private int images[] = null;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    images
    =new int[]{R.drawable.p1, R.drawable.p2,
    R.drawable.p3, R.drawable.p4,
    R.drawable.p5,R.drawable.p6,
    R.drawable.p7,R.drawable.p8};
    texts
    = new String[]{ "宫式布局1", "宫式布局2",
    "宫式布局3", "宫式布局4",
    "宫式布局5", "宫式布局6",
    "宫式布局7", "宫式布局8"};

    GridView gridview
    = (GridView) findViewById(R.id.gridview);
    ArrayList
    <HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
    for (int i = 0; i < 8; i++) {
    HashMap
    <String, Object> map = new HashMap<String, Object>();
    map.put(
    "itemImage", images[i]);
    map.put(
    "itemText", texts[i]);
    lstImageItem.add(map);
    }

    SimpleAdapter saImageItems
    = new SimpleAdapter(this,
    lstImageItem,
    // 数据源
    R.layout.night_item,// 显示布局
    new String[] { "itemImage", "itemText" },
    new int[] { R.id.itemImage, R.id.itemText });
    gridview.setAdapter(saImageItems);
    gridview.setOnItemClickListener(
    new ItemClickListener());
    }

    class ItemClickListener implements OnItemClickListener {
    /**
    * 点击项时触发事件
    *
    *
    @param parent 发生点击动作的AdapterView
    *
    @param view 在AdapterView中被点击的视图(它是由adapter提供的一个视图)。
    *
    @param position 视图在adapter中的位置。
    *
    @param rowid 被点击元素的行id。
    */
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowid) {
    HashMap
    <String, Object> item = (HashMap<String, Object>) parent.getItemAtPosition(position);
    //获取数据源的属性值
    String itemText=(String)item.get("itemText");
    Object object
    =item.get("itemImage");
    Toast.makeText(GvActivity.
    this, itemText, Toast.LENGTH_LONG).show();

    //根据图片进行相应的跳转
    switch (images[position]) {
    case R.drawable.p1:
    startActivity(
    new Intent(GvActivity.this, TestActivity1.class));//启动另一个Activity
    finish();//结束此Activity,可回收
    break;
    case R.drawable.p2:
    startActivity(
    new Intent(GvActivity.this, TestActivity2.class));
    finish();
    break;
    case R.drawable.p3:
    startActivity(
    new Intent(GvActivity.this, TestActivity3.class));
    finish();
    break;
    }

    }
    }
    }

    运行结果

  • 相关阅读:
    Lua源码分析(一)二进制块的加载
    Unity的Deferred Shading
    在DirectX12中使用Instancing
    由《怪物弹珠》浅谈游戏的本地化
    浅谈游戏中BOSS设计的思路
    XCOM2中敌对生物设计分析(Aliens篇)
    XCOM2中敌对生物设计分析(ADVENT篇)
    Roguelike元素对游戏设计的影响
    浅谈游戏策划定位
    源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1962535.html
Copyright © 2011-2022 走看看