本章使用GridView控件来做一个相冊效果。

图片效果例如以下:

响应点击事件,点击的时候提示是当前第几章图片。从左到右,从上到下。

点击了第一张图片,显示了1.

步骤:

一 新建项目,然后把图片资源复制到res/drawable/目录中,假设没有drawable这个目录也不要紧,能够直接新建这个目录。然后在Eclipse项目中刷新,就会在项目中显示出来了

二 然后在Layout的界面xml文件activity_main.xml(当然也能够任意自己喜欢命名),输入例如以下代码:

<?

xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>

没什么特别的。就是设置好行宽,然后自己主动排好行数numColumns="auto_fit"。这个好像是Android自己主动排列的。

三 activity_main.xml相应的java文件MainActivity.java输入逻辑代码,主要是改动onCreate这个函数就能够了,其它就默认能够了,不用管:

	@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(MainActivity.this, "" + (position+1),
Toast.LENGTH_SHORT).show();
}
});
}

主要是设置好监听GridView对象的ItemClickListener就能够了。

Toast能够理解为一个轻量的提示对话框,就是上图中显示1的一个小对话框,显示大概1秒多就自己主动消失。

小技巧:

不知道对象属于那些头文件?比如OnItemClickListener是属于什么文件库啊?

这个有时候是个头疼的问题,尤其是使用VC写C++的时候,须要自己动手去查,头疼的是,查到了这个函数。或者类之后,竟然没提示须要include什么头文件。只是到了Java,似乎那都不是事了,一个快捷键搞定了:ctrl+shift+o;那么就会全自己主动包含全部须要的库了。

四 之后创建一个Java类,放在MainActivity.java一个文件夹下,然后加入代码:

package su.gridview.hellogridview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView; public class ImageAdapter extends BaseAdapter {
private Context mContext; public ImageAdapter(Context c) {
mContext = c;
} public int getCount() {
return mThumbIds.length;
} public Object getItem(int position) {
return null;
} public long getItemId(int position) {
return 0;
} // create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some
// attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
} imageView.setImageResource(mThumbIds[position]);
return imageView;
} // references to our images
private Integer[] mThumbIds = { R.drawable.x0, R.drawable.x1,
R.drawable.x2, R.drawable.x3, R.drawable.x4, R.drawable.x5,
R.drawable.x10, R.drawable.x9, R.drawable.x8, R.drawable.x7,
R.drawable.x6, R.drawable.x5, R.drawable.x11, R.drawable.x20,
R.drawable.x13, R.drawable.x14, R.drawable.x15, R.drawable.x16,
R.drawable.x17, R.drawable.x18, R.drawable.x19, R.drawable.x20 };
}

本例无用的函数都是由于必须须要复写BaseAdapter类的。

主要使用了getCount和getView这两个函数。依照他的样式实现就能够了,详细的低层工作就是由Adapter类自己主动调用的,调用getCount。Adapter就知道有多少资源对象须要显示了,调用getView就能够把图片资源显示出来,当中传入convertView是为了加速,复用之前用过的View。

这个是我的理解,更加具体的原理还有待有空參考一下源码吧。

參考资料:http://developer.android.com/guide/topics/ui/layout/gridview.html

第二章完毕,感觉Android敲代码实在是太方便了,难怪Android大行其道啊,对照一个DirectX这些API的使用方法,简直就是傻瓜式的。尤其令我想起之前使用Direct2D,微软真的傻了,都什么年头了。竟然还出Direct2D这么难用的API。呵呵,别说我黑微软。近期听说VC竟然要支持Android了,感觉微软是低下了高贵的头了。支持了竞争对手的东西。同一时候也想赶上Android的步伐。不是牺牲色相啊。战略须要,是应该低下头的。

Android百日程序:GridView实现相冊效果的更多相关文章

  1. HTML5 CSS3专题 纯CSS打造相冊效果

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30993277 今天偶然发现电脑里面还有这种一个样例.感觉效果还不错,不记得啥时候 ...

  2. 堆叠相冊效果,兼容pc和移动端

    在手机端,堆叠效果的相冊是比較常见的一种图片展示方式,每一个人的思路可能会有一些不同,实现的方法不同. 本篇博客主要是分享下我的实现方法.欢迎大家提出建议,指出我的不足,先3Q啦~ 先看一下终于的效果 ...

  3. Android百日程序:绘画程序-画手指路径

    本程序实如今一个画布中,用手指绘图的效果. 须要使用的知识: 1 Canvas 画布,动态保存更新当前画面 2 Path 记录并画出手接触屏幕经过的路径 如以下效果图: 仅仅须要依照默认设置新建一个项 ...

  4. Android百日程序 开篇章:Intent打开网页

    学习一下人家100日写100个网页的做法,我也用100日写100个完整的Android程序. 这些程序的最基本要求: 1 完整性-每一个程序都必须是独立可执行的 2 不反复性-所用的重点知识点都不一样 ...

  5. android仿最新版本号微信相冊--附源代码

    更改排版为 markdown: http://blog.csdn.net/self_study/article/details/69397859

  6. Android应用程序注冊广播接收器(registerReceiver)的过程分析

    前面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/公布机制,因此,使用这样的消息驱动模型的第一步便是订阅消息:而对Android应用程序来说,订阅消息事实上就是注冊广播接收器, ...

  7. Android实现批量照片上传至server,拍照或者从相冊选择

    近期因为项目需求,须要完毕批量照片上传,折腾了一段时间,最终完毕了,达到了例如以下效果 主界面主要有GridView组成和button组成,当按下一个格点时,会调用相机或者相冊,拍照或者选择相冊照片, ...

  8. Android上传图片之调用系统拍照和从相冊选择图片

    Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015 ...

  9. android高仿微信拍照、多选、预览、删除(去除相片)相冊功能

    先声明授人与鱼不如授人与渔,仅仅能提供一个思路,当然须要源代码的同学能够私下有偿问我要源代码:QQ:508181017 工作了将近三年时间了,一直没正儿八经的研究系统自带的相冊和拍照,这回来个高仿微信 ...

随机推荐

  1. Multiple CPUs,Multiple Cores、Hyper-Threading

    CPU Basics: Multiple CPUs, Cores, and Hyper-Threading Explained 现在多数的家用电脑,仍然使用的是 Single CPU,Multiple ...

  2. 一句SQL按照某个字段数值拆分出对应的数据条数,借助数据库常量表【master..spt_values】实现

    简介:master..spt_values,数据行拆分简单小技巧 SELECT ProjGUID , CostGUID , SUM(FtAmount) AS FtAmount , BeginMonth ...

  3. (转)Tomcat文件详解

    做web项目,最常用的服务器就是Apache的tomcat.虽然一直在用tomcat,但都是仅限在使用的阶段,一直没有深入学习过.想深入学习tomcat,首推的肯定是官网:http://tomcat. ...

  4. 微信浏览器的html5页面显示配置等问题汇集 1,禁止微信浏览器分享页面链接 (定点更新)

    公司新需求,要求从安卓IOS应用分享到微信的链接页面不允许二次转发,所以开始编程第一步,上网找资料... 网上大神就是多,不消两分钟,找到方案,很简单,上代码先: wx.config({ debug: ...

  5. 第6章4节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

    在第2节中我们看到了MonkeySourceNetwork是怎样从Socket中获取MonkeyRunner发送过来的命令字串的,可是最后怎样将它翻译成事件的代码我们还没有进行分析,由于在那之前我们还 ...

  6. SICP 习题 (2.10)解题总结: 区间除法中除于零的问题

    SICP 习题 2.10 要求我们处理区间除法运算中除于零的问题. 题中讲到一个专业程序猿Ben Bitdiddle看了Alyssa的工作后提出了除于零的问题,大家留意一下这个叫Ben的人,后面会不断 ...

  7. 如何让Apache不显示服务器信息

    如何让Apache不显示服务器信息 Apache的默认配置是会显示服务器信息的,比如访问一个服务器上不存在的页面,Apache会返回"Not Found"的错误,这个错误页面的最下 ...

  8. 二、MongoDB基础知识

    1.文档是MongoDB的核心概念.文档就是键值对的一个有序集{'msg':'hello','foo':3}.类似于python中的有序字典. 需要注意的是: #1.文档中的键/值对是有序的. #2. ...

  9. sql server中新增一条数据后返回该数据的ID

    开发中遇到的问题:在新增一条数据后往往不需要返回该数据的ID,但是有的时候可能需要返回该数据的ID以便后面的编程使用. 在这里介绍两种方法: 其一:使用存储过程: create procedure a ...

  10. [Node.js] Node Util Promisify - How to Convert Callback Based APIs to Promise-based

    Since Node.js V8.0+, it introduces a 'util' libaray, which has a 'promisfy' function. It can conver ...