登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 2430714|回复: 311

第十三讲:用户界面 View(八)

  [复制链接]

2826

主题

7684

帖子

9548

安币

管理员

Rank: 9Rank: 9Rank: 9

QQ达人最佳新人活跃会员热心会员推广达人灌水之王突出贡献

QQ
发表于 2011-4-23 14:07:09 | 显示全部楼层 |阅读模式
本讲内容:Gallery,GridView
十五、Gallery 画廊
Gallery是一个内部元素可以水平滚动,并且可以把当前选择的子元素定位在它中心的布局组件。
我们还是直接看看例子的运行效果。
其中我们使用FrameLayout来实现叠加效果,使用ImageView来显示大图,Gallery来展示画廊,android:spacing="5dp" 属性则是用来设置元素之间的间隔。4、在res/values/目录中新建一个attrs.xml内容如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <resources>
  3.         <declare -styleable="" name="HelloGallery">
  4.                 <attr name="android:galleryItemBackground">
  5.         </attr></declare>
  6. </resources>
复制代码
5、在MainHelloGallery.java中的内容如下:
  1. package android.basic.lesson13;

  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.res.TypedArray;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.ViewGroup;

  8. import android.widget.AdapterView;
  9. import android.widget.AdapterView.OnItemClickListener;
  10. import android.widget.BaseAdapter;
  11. import android.widget.Gallery;
  12. import android.widget.ImageView;
  13. import android.widget.Toast;

  14. public class MainHelloGallery extends Activity {

  15.         /** Called when the activity is first created. */
  16.         @Override
  17.         public void onCreate(Bundle savedInstanceState) {
  18.                 super.onCreate(savedInstanceState);
  19.                 setContentView(R.layout.main);

  20.                 //定义UI组件
  21.                 final ImageView iv= (ImageView)findViewById(R.id.ImageView01);
  22.                 Gallery g = (Gallery) findViewById(R.id.Gallery01);

  23.                 //设置图片匹配器
  24.                 g.setAdapter(new ImageAdapter(this));

  25.                 //设置AdapterView点击监听器,Gallery是AdapterView的子类
  26.                 g.setOnItemClickListener(new OnItemClickListener() {

  27.                         @Override
  28.                         public void onItemClick(AdapterView<?> parent, View view,
  29.                                         int position, long id) {
  30.                                 //显示点击的是第几张图片
  31.                                 Toast.makeText(MainHelloGallery.this, "" + position,
  32.                                                 Toast.LENGTH_LONG).show();
  33.                                 //设置背景部分的ImageView显示当前Item的图片
  34.                                 iv.setImageResource(((ImageView)view).getId());
  35.                         }
  36.                 });
  37.         }

  38.         //定义继承BaseAdapter的匹配器
  39.         public class ImageAdapter extends BaseAdapter {

  40.                 //Item的修饰背景
  41.                 int mGalleryItemBackground;

  42.                 //上下文对象
  43.                 private Context mContext;

  44.                 //图片数组
  45.                 private Integer[] mImageIds = { R.drawable.wallpaper_0,
  46.                                 R.drawable.wallpaper_1, R.drawable.wallpaper_2,
  47.                                 R.drawable.wallpaper_3, R.drawable.wallpaper_4,
  48.                                 R.drawable.wallpaper_5, R.drawable.wallpaper_6,
  49.                                 R.drawable.wallpaper_7, R.drawable.wallpaper_8,
  50.                                 R.drawable.wallpaper_9 };

  51.                 //构造方法
  52.                 public ImageAdapter(Context c){
  53.                         mContext = c;
  54.                         //读取styleable资源
  55.                 TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
  56.                 mGalleryItemBackground = a.getResourceId(
  57.                         R.styleable.HelloGallery_android_galleryItemBackground, 0);
  58.                 a.recycle();

  59.                 }

  60.                 //返回项目数量
  61.                 @Override
  62.                 public int getCount() {
  63.                         return mImageIds.length;
  64.                 }

  65.                 //返回项目
  66.                 @Override
  67.                 public Object getItem(int position) {
  68.                         return position;
  69.                 }

  70.                 //返回项目Id
  71.                 @Override
  72.                 public long getItemId(int position) {
  73.                         return position;
  74.                 }

  75.                 //返回视图
  76.                 @Override
  77.                 public View getView(int position, View convertView, ViewGroup parent) {

  78.                         ImageView iv = new ImageView(mContext);
  79.                         iv.setImageResource(mImageIds[position]);
  80.                         //给生成的ImageView设置Id,不设置的话Id都是-1
  81.                         iv.setId(mImageIds[position]);
  82.                         iv.setLayoutParams(new Gallery.LayoutParams(120, 160));
  83.                         iv.setScaleType(ImageView.ScaleType.FIT_XY);
  84.                         iv.setBackgroundResource(mGalleryItemBackground);
  85.                         return iv;
  86.                 }

  87.         }
  88. }
复制代码


我们点击某一张图片,会把该子元素的图片显示在放在后面一层的ImageView组件中。有兴趣的同学可以了解一下AdapterView的继承关系:[url=http://android.yaohuiji.com/wp-content/uploads/2010/07/KQXSZPTTPOE0J0WC8_J.jpg]
十六、GridView 网格组件(待续)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

1

主题

27

帖子

20

安币

初级码农

Rank: 1

发表于 2012-5-22 15:49:52 | 显示全部楼层
yxm-antry 发表于 2012-3-20 11:01
attrs.xml
出现错误error: Found tag declare where item is expected
是什么情况

应该这么写:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <declare-styleable name="HelloGallery">
        <attr name="android:galleryItemBackground"></attr>
    </declare-styleable>
</resources>

主题

帖子

安币

游客

发表于 2011-5-12 17:58:22 | 显示全部楼层
我按照楼主这样做后,报了个错,麻烦楼主帮忙看一下
OnItemClickListener cannot be resolved to a type

0

主题

5

帖子

7

安币

初级码农

Rank: 1

发表于 2011-5-26 23:39:04 | 显示全部楼层
看来得好好学习了

0

主题

6

帖子

4

安币

初级码农

Rank: 1

发表于 2011-6-1 16:55:04 | 显示全部楼层
看来还需要学习很多啊!

0

主题

381

帖子

246

安币

攻城狮

Rank: 3Rank: 3

QQ达人

QQ
发表于 2011-6-9 15:07:23 | 显示全部楼层
还好多要学啊

主题

帖子

安币

游客

发表于 2011-7-7 14:22:51 | 显示全部楼层
本帖最后由 jxaly_yj 于 2011-7-7 14:32 编辑

学习了!!

0

主题

205

帖子

306

安币

攻城狮

Rank: 3Rank: 3

发表于 2011-7-15 22:52:28 | 显示全部楼层
回复 旅行的蜗牛 的帖子

你应该要引用 View.OnItemClickListener 这个包才行的。

0

主题

21

帖子

14

安币

初级码农

Rank: 1

发表于 2011-7-24 10:11:36 | 显示全部楼层
Gallery 学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表