该游戏是简单的猜点游戏,1 点为正确的点数
java代码:
package com.mrzhu.test0109_project;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class Main extends Activity {
private ImageView imav1;
private ImageView imav2;
private ImageView imav3;
private Button reset;//重新开始按钮
private TextView content;//显示结果
private int[] arr;//0到2的数组,用于洗牌
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得控件
imav1 = (ImageView) findViewById(R.id.imv1);
imav2 = (ImageView) findViewById(R.id.imv2);
imav3 = (ImageView) findViewById(R.id.imv3);
reset = (Button) findViewById(R.id.reset);
content = (TextView) findViewById(R.id.content);
//为重新开始按钮设置监听
reset.setOnClickListener(new resetOnClickListener());
}
//判断点击了哪个牌,响应相应事件
public void click(View v){
if(v.getId() == imav1.getId()){
imav1Click();
}else if(v.getId() == imav2.getId()){
imav2onClick();
}else if(v.getId() == imav3.getId()){
imav3onClick();
}
}
//单击了第一张牌响应的事件
public void imav1Click() {
retu();
if(arr[0] == 0)
content.setText("恭喜你,你猜对了!");
else
content.setText("哦哦,猜错了!");
imav2.setAlpha(100);
imav3.setAlpha(100);
imav2.setClickable(false);
imav3.setClickable(false);
}
//单击了第二张牌响应的事件
public void imav2onClick() {
retu();
if(arr[1] == 0)
content.setText("恭喜你,你猜对了!");
else
content.setText("哦哦,猜错了!");
imav1.setAlpha(100);
imav3.setAlpha(100);
imav1.setClickable(false);
imav3.setClickable(false);
}
//单击了第三张牌响应的事件
public void imav3onClick() {
retu();
if(arr[2] == 0)
content.setText("恭喜你,你猜对了!");
else
content.setText("哦哦,猜错了!");
imav1.setAlpha(100);
imav2.setAlpha(100);
imav1.setClickable(false);
imav2.setClickable(false);
}
//重新开始按钮事件
public class resetOnClickListener implements OnClickListener{
public void onClick(View v) {
imav1.setImageResource(R.drawable.p04);
imav2.setImageResource(R.drawable.p04);
imav3.setImageResource(R.drawable.p04);
imav1.setAlpha(255);
imav2.setAlpha(255);
imav3.setAlpha(255);
content.setText("猜猜看");
imav1.setClickable(true);
imav2.setClickable(true);
imav3.setClickable(true);
}
}
//翻牌时调用的方法,生成不重复的随机数加到数组中,设置控件显示的图片
private void retu(){
Random random = new Random();
arr = new int[3];
for(int i = 0; i < 3; ++i){
int index = random.nextInt(3);
if(arr[index] != 0)
i--;
else
arr[index] = i;
}
imav1.setImageResource(R.drawable.p01 + arr[0]);
imav2.setImageResource(R.drawable.p01 + arr[1]);
imav3.setImageResource(R.drawable.p01 + arr[2]);
}
}
main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/content"
android:textSize="20px"
android:text="猜猜看" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src=/blog_article/"@drawable/p04"_br/index.html>
android:id="@+id/imv1"
android:onClick="click"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src=/blog_article/"@drawable/p04"_br/index.html>
android:id="@+id/imv2"
android:onClick="click"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src=/blog_article/"@drawable/p04"_br/index.html>
android:id="@+id/imv3"
android:onClick="click"
/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重新开始"
android:id="@+id/reset"
/>
</LinearLayout>
资源下载地址:http://download.csdn.net/detail/zlqqhs/4977126
Annotation是Java语言所提供的一种很有用的机制,特别在用于Java对象的描述化处理时能大大简化代码量。在阅读本文之前最好先了解一下Java Annotation的基础知识,在这一方面在网上很容易找到学习资料,比如下面这一篇:
JAVA ANNOTATION详解
JSON与Java对象之间的形式化转换在一些J2EE的框架中有提供,但是在Android中没有实现。本文主要介绍如何通过annotation实现一种形式化的方法,在Android上实现JSON字符串与Java对象之间的相互转化。
首先定义一个用于annotaion类型,在定义Java类时,可以使用该类型来标记哪些域(Field)需要输出到JSON字符串中。
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface JSONValue { String tag() default ""; }
该annotation包括一个变量tag,这是指其所标记的域在JSON字符串中的前导字符串(名称)。
然后定义一个转换工具类,用于Java对象与JSON对象之间的转换。
public class JSONConverter { public static void fromJSon(String json_string, Object o) throws Exception { JSONObject = new JSONObject(json_string); JSONObject jo = new JSONObject(); Field[] fields = o.getClass().getFields(); for(Field f : fields) { if(f.isAnnotationPresent(QueryValue.class)) { JSONValue jv = f.getAnnotation(JSONValue.class); String tag = jv.tag();if(tag.length() > 0) { if(f.getType().getSimpleName().equals("int")) { f.setInt(o, jo.optInt(tag)); } else { f.set(o, jo.optString(tag)); } } } } return jo.toString(); } public static String toJSon(Object o) throws Exception { JSONObject = new JSONObject(); Field[] fields = o.getClass().getFields(); for(Field f : fields) { if(f.isAnnotationPresent(QueryValue.class)) { JSONValue jv = f.getAnnotation(JSONValue.class); String tag = jv.tag(); if(tag.length() > 0) { if(f.getType().getSimpleName().equals("int")) { jo.put(tag, f.getInt(o)); } else { Object v = f.get(o); if(v != null) jo.put(tag, v); } } } } return jo.toString(); } }
上述工具类实现了两个静态方法:fromJSON()用于从JSON对象中解析出Java对象,toJSON()用于将一个Java对象转换为JSON对象。在上述示例中仅支持int、String两种数据类型,这已经能满足绝大多数应用的需要。如果还想支持其它类型,则需要根据示例进行修改。另外,上述示例尚不支持JSON数组类型。
然后是定义需要转为为JSON对象的Java类型,定义时需要使用前面定义的annotation,比如:
class MyObject { @JSONValue(tag="id") public int mId; @JSONValue(tag="name") public String mName; }
在定义需要输出到JSON对象的域时,将该域定义为public类型,并使用JSONValue进行标记,同时指定该域在JSON对象中的前导字符串(名称)。在使用时可以很简单地将该类型的对象转为JSON字符串:
MyObject o = new MyObject(); o.mId = 123; o.mName = "张三"; String json = JSONConverter.toJSON(o);
转换后的JSON字符串型为:{"id":123,"name":"张三”};
JSON字符串也可以很容易解析成Java对象:
String json_string = {"id":123,"name":"张三”}; MyObject o = new MyObject(); JSONConverter.fromJSON(json_string, o);
通过上述方法,MyObject的子类同样可以与JSON对象进行双向转换,子类中也可以定义自己的JSONValue。
1、在JQuery Mobile中,可以通过页面缓存的方式将访问过的历史内容写入页面文档的缓存中,当用户重新访问时,不需要重新加载,只要从缓存中读取就可以。
2、设置页面为缓存,只需要在page容器中添加data-dom-cache属性,并将属性设置为true。在JQuery Mobile中设置缓存页面还有另外一种方法,即通过JavaScript代码设置一个全局性的JQuery Mobile属性值为true,代码如:$.mobile.page.prototype.options.domCache=true
3、示例代码:
<!DOCTYPE HTML >
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<link href=/blog_article/"Css/jquery.mobile-1.2.0.min.css" rel="Stylesheet" type="text/css"/>
<script src=/blog_article/"Js/jquery-1.8.3.min.js" type"text/javascript"></script>
<script src=/blog_article/"Js/jquery.mobile-1.2.0.min.js" type="text/javascript"></script>
</HEAD>
<BODY>
<div data-role="page" data-dom-cache="true">
<div data-role="header"><h1>缓存页面</h1></div>
<div data-role="content">
<p>这是一个被缓存的页面</a></p>
</div>
<div data-role="footer"><h4>@2013 3i studio</h4></div>
</div>
</BODY>
</HTML>
4、效果图预览: