主要给大家介绍如何加载界面的图片。正如前面AbstractBoard类的代码中看到的,当程序需要创建N个Piece对象时,程序会直接调用ImageUtil的getPlayImages()方法去获取图片,该方法将会随机从res\drawable-mdpi目录下取得N张图片。
为了让getPlayImages()方法从res\drawable-mdpi目录下随机取得N张图片,程序的实现思路可分为如下几步:
1、通过反射来获取R.drawable的所有Field(Android的每张图片资源都会自动转换为R.drawable的静态Field),并将这些Field值添加到一个List集合中。
2、从第一步得到的List集合中随机“抽取”N/2个图片ID。
3、将第二步得到的N/2个图片ID全部复制一份,这样就得到了N个图片ID,而且每个图片ID都可以找到与之配对的。
4、将第三步得到的N个图片ID再次“随机打乱”,并根据图片ID加载相应的Bitmap对象,最后把图片ID及对应的Bitmap封装成PieceImage后返回。
下面是ImageUtil类的代码。
java代码:
public class ImageUtil
{
// 保存所有连连看图片资源值(int类型)
private static List<Integer> imageValues = getImageValues();
//获取连连看所有图片的ID(约定所有图片ID以p_开头)
public static List<Integer> getImageValues()
{
try
{
// 得到R.drawable所有的属性, 即获取drawable目录下的所有图片
Field[] drawableFields = R.drawable.class.getFields();
List<Integer> resourceValues = new ArrayList<Integer>();
for (Field field : drawableFields)
{
// 如果该Field的名称以p_开头
if (field.getName().indexOf("p_") != -1)
{
resourceValues.add(field.getInt(R.drawable.class));
}
}
return resourceValues;
}
catch (Exception e)
{
return null;
}
}
/**
* 随机从sourceValues的集合中获取size个图片ID, 返回结果为图片ID的集合
* @param sourceValues 从中获取的集合
* @param size 需要获取的个数
* @return size个图片ID的集合
*/
public static List<Integer> getRandomValues(List<Integer> sourceValues,
int size)
{
// 创建一个随机数生成器
Random random = new Random();
// 创建结果集合
List<Integer> result = new ArrayList<Integer>();
for (int i = 0; i < size; i++)
{
try
{
// 随机获取一个数字,大于、小于sourceValues.size()的数值
int index = random.nextInt(sourceValues.size());
// 从图片ID集合中获取该图片对象
Integer image = sourceValues.get(index);
// 添加到结果集中
result.add(image);
}
catch (IndexOutOfBoundsException e)
{
return result;
}
}
return result;
}
/**
* 从drawable目录中获取size个图片资源ID, 其中size为游戏数量
* @param size 需要获取的图片ID的数量
* @return size个图片ID的集合
*/
public static List<Integer> getPlayValues(int size)
{
if (size % 2 != 0)
{
// 如果该数除以2有余数,将size加1
size += 1;
}
// 再从所有的图片值中随机获取size的一半数量
List<Integer> playImageValues = getRandomValues(imageValues, size / 2);
// 将playImageValues集合的元素增加一倍(保证所有图片都有与之配对的图片)
playImageValues.addAll(playImageValues);
// 将所有图片ID随机“洗牌”
Collections.shuffle(playImageValues);
return playImageValues;
}
/**
* 将图片ID集合转换PieceImage对象集合,PieceImage封装了图片ID与图片本身
* @param context
* @param resourceValues
* @return size个PieceImage对象的集合
*/
public static List<PieceImage> getPlayImages(Context context, int size)
{
// 获取图片ID组成的集合
List<Integer> resourceValues = getPlayValues(size);
List<PieceImage> result = new ArrayList<PieceImage>();
// 遍历每个图片ID
for (Integer value : resourceValues)
{
// 加载图片
Bitmap bm = BitmapFactory.decodeResource(
context.getResources(), value);
// 封装图片ID与图片本身
PieceImage pieceImage = new PieceImage(bm, value);
result.add(pieceImage);
}
return result;
}
// 获取选中标识的图片
public static Bitmap getSelectImage(Context context)
{
Bitmap bm = BitmapFactory.decodeResource(context.getResources(),
R.drawable.selected);
return bm;
}
}
转自:http://www.eoeandroid.com/thread-100856-1-1.html
发表评论
-
android aidl 主进程子进程间数据相互传递
2012-12-18 11:49 3961android中进程间的通信对与大量的接口的调用的时候,一般是 ... -
android 实现在titlebar上显示进度条
2012-11-13 18:48 865先是在setContextView之前设置界面的样式 requ ... -
android 实现下拉刷新的功能
2012-11-13 15:41 4308在android中有时我们要实现下拉刷新的功能,我在前日人的基 ... -
android aidl进程间方法的调用
2012-10-10 14:21 1641android 进程的通信很多,可以用intent传递数据,可 ... -
listView 点击一个Item效果
2012-01-13 17:20 6本人刚做一个项目需求是这样的:展示通话记录的列表,点击每一条记 ... -
android aidl
2012-01-11 11:12 1053android中的进程间的通信很多,下面粗略的讲解一下如何实现 ... -
android 权限大全
2011-12-22 20:08 888android.permission.ACCESS_CHECK ... -
android Action大全
2011-12-21 20:26 1165String ADD_SHORTCUT_ACTION 动作 ... -
android 自定义桌面
2011-12-03 16:23 14131、 把背景图片push到SDCard中 adb pu ... -
android 判断网络是否连接可用
2011-12-03 13:06 1694// 判断网络是否正常 public static boole ... -
火星通讯录
2011-11-25 20:27 1427一、用.rar打开apk文档,得到文档结构图如下所示 ... -
android 四种加载模式2
2011-11-16 11:13 995singleInstance模式解决了这个问题(绕了这么半天才 ... -
activity 的四种加载的模式1
2011-11-16 11:11 1030在android应用的开发中有时会activity之间的重复的 ... -
android 面试题
2011-11-09 20:17 1039android 面试题 1.android中进程和进程间的通信 ... -
android ksoap调用天气预报
2011-11-08 19:27 5129下面例子改自网上例子:http://express.ruank ... -
android NDK
2011-11-03 21:34 2073Cygwin+Android NDK的安装 时 间 版 本 ... -
android 判断sdcard是否存在,以及写入权限
2011-10-16 16:57 5784做android 开发的时候经常涉及到权限的问题,而我们像sd ... -
android bitmap
2011-10-14 11:02 845对于android终端应用软件开发的人员来说图片显示时,如果图 ... -
android popupwindow,调用本地的图库,照相
2011-10-14 10:51 5426我们写项目的时候又是要自定义弹出美观的悬浮操作窗口,这里我们可 ... -
android notification
2011-10-14 10:39 1049前些天刚刚做一个项目的预演,要用到广播通知,一下是一些小的学习 ...
相关推荐
安卓开发--Android连连看游戏源码.zip ... Bitmap对象和图片资源的ID,Bitmap对象用于在游戏界面上绘制方块,而图片资源ID代表了Piece对象的标识,当两个Piece封装的图片资源的ID相等时,即可认为Piece上的图片相同。
2. **皮肤包**:皮肤包是包含应用界面元素如颜色、图片、布局等资源的文件集合,用于改变应用的视觉样式。通常,皮肤包会以APK格式存在,以便于加载和管理。 3. **动态加载**:动态加载是指在应用程序运行过程中,...
2. 应用主题:在AndroidManifest.xml中,将应用或活动的theme属性设为主题资源ID: ```xml android:theme="@style/MyTheme"> ... ``` 三、换肤功能实现 换肤功能通常涉及动态加载不同的主题资源。以下是一种...
- 使用ArrayList或者其它集合类存储图片的资源ID,便于随机选取。 - 通过Resources对象的getDrawable()方法加载随机选择的图片资源。 3. **动画与视觉效果**: - 在Android中,可以使用Transition动画或帧动画...
在Android应用开发中,换肤功能是一个非常受欢迎的特性,它允许用户根据个人喜好更改应用程序的界面风格。"android-skin-loader"是一个专门为Android平台设计的插件化换肤库,方便开发者集成到自己的项目中,为用户...
异步加载,通过异步加载外部网站的多张图片,来介绍和演示Android环境下如何去实现文件异步加载功能,想搞Android软件开发的新手,有必要掌握 的一个技巧,程序中考虑到捕获RejectedExecutionException同时加载的...
描述了如何通过CharSequence类型的数据来动态改变TextView中的文本内容,以及如何引用资源ID实现这一目标。 - **3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法** 提供了获取设备屏幕尺寸的具体方法...
首先,`ImageView`是Android中的一个核心组件,它用于显示图像资源,可以是本地文件、网络图片或资源ID。要实现跑马灯效果,我们通常会用到`ViewPager`或`HorizontalScrollView`等可滑动视图组件,结合适配器...
在Android开发中,构建一个多级部门树结构是一个常见的需求,特别是在企业级应用中,用于组织员工、权限分配或数据管理。这个"Android 多级部门树(支持无限级),支持部门级别多选"的资源正是为了解决这个问题而...
- **资源引用**: 通过引用资源 ID 来在代码中访问资源。 **4. 国际化和本地化 - Internationalization and Localization** - **国际化和本地化**: 为了支持不同的语言和地区,应用程序需要提供多种语言的资源文件...
9. **资源ID**:在Android应用中,资源通过ID引用,如`R.drawable.bk`。这些ID由Android编译器自动生成,对应于XML资源文件中的定义。 10. **resizeBitmap()**:这个方法可能是用来调整`Bitmap`的大小,以适应不同...
总之,动态添加表格行是Android开发中的基本技巧,掌握好这个技能可以让你在构建数据展示界面时更加游刃有余。通过阅读`TableLayoutDemo`的源码,你应该能更深入地理解这一过程,并将其运用到自己的项目中。
Android使用XML来定义用户界面的布局,开发者可以在布局文件中设置ImageView或Color资源来改变背景。例如,`<android.widget.ImageView>` 或 `<android.graphics.drawable.ColorDrawable>` 可以在运行时根据需要加载...
在Android开发中,View是界面元素的基础类,几乎所有的UI组件都继承自它。了解View的构造方法及其参数对于优化布局加载和理解Android系统的工作原理至关重要。本文将深入解析`Android view构造方法第3个参数详解 ...
这需要在资源文件中添加相应的字符串数组,并在运行时根据用户的设备设置动态加载。 9. **数据持久化**: 用户的选择应被保存以便下次打开应用时能恢复。可以利用SharedPreferences存储简单的选择,或者使用数据库...
在Android应用开发中,创建一个“海底动物照片墙”应用涉及到多个UI组件和技术的使用,如文本视图、单选按钮(组)、图像框、按钮以及对话框。以下是对代码清单的详细解析: 1. **包结构与导入**: - 包名:`...
在代码示例中,我们首先获取ListView实例,然后创建一个ArrayAdapter,传入数据集合和预设的布局文件`android.R.layout.simple_list_item_1`。这个布局文件会将每个条目显示为一个TextView。最后,我们将Adapter设置...
在Android开发中,"android滑动分页"是一种常见的用户界面设计,用于提供流畅的多页面浏览体验。这种设计通常采用ViewPager组件来实现,它允许用户通过左右滑动来切换不同的页面,非常适合用来展示照片或者内容丰富...