android小程序--猜猜红桃A在哪儿
ImageView单击事件与透明度处理
范例说明
在还是黑白屏幕的时候手机游戏就有了,相信许多人都曾经有过利用手机里的小游戏来消磨时间吧!现在这个范例就简单的利用Android的ImageView对象来实现一个手机小游戏!
有看过别人赌扑克牌吗?一张小桌子,放上三张牌,红桃A、黑桃2与梅花3,庄家先把三张牌都亮出来,让玩家看清楚红桃A在哪里,之后庄家将牌翻面,并随意变换牌的顺序后,玩家开始下注,猜测红桃A是哪一张?如果猜中了,玩家就赢得两倍的下注金;如果猜错了,下注金就被庄家赢走了!
本范例将制作一个猜牌游戏的简化版,游戏一开始并不直接亮出三张牌,而是翻面洗牌之后直接请玩家来猜猜看红桃A是哪一张,游戏过程绝对公平透明,绝对不会有诈赌的情形发生。
范例中使用TextView、Button及三个ImageView对象,一开始三个ImageView都默认显示扑克牌背面,当用户选择了其中一张牌时,三个ImageView同时翻面,程序并依照选择的对错,在TextView中显示结果,并可通过“再玩一次”的Button来重新开始游戏。
实现本范例前需先准备四张图片:红桃A、黑桃2、梅花3及扑克牌背面,并将这四张图片文件存入/res/drawable/文件夹中。以本范例而言,四张图片文件的路径如下:
/res/drawable/p01.png:红桃A
/res/drawable/p02.png:黑桃2
/res/drawable/p03.png:梅花3
/res/drawable/p04.png:扑克牌背面
当游戏一开始,User便从三张扑克牌当中单击一张,然后程序会一次翻开所有牌面,并将User未选择的牌面以灰暗效果处理,在这个范例练习里,将学习ImageView的onClickListener()事件与设置透明度的技巧。
范例程序
src/irdc.ex04_16/EX04_16.java
首先将三张图片文件的id存入数组s1中,randon()这个方法会将s1中的id顺序作随机的调换,以制造洗牌的效果,三个ImageView默认加载图片都为扑克牌背面。
当用户单击其中一张图片时,会触发该ImageView的onClick事件,程序将判断此张牌是否为红心A,再依猜对与否决定TextView的显示内容。
“再玩一次”Button中的onClick事件,会将三个ImageView显示的图片文件都重新设置为扑克牌背面,并做一次重新洗牌的动作(自定义的randon()方法)。
/* import程序略 */
public class EX04_16 extends Activity
{
/*声明对象变量*/
private ImageView mImageView01;
private ImageView mImageView02;
private ImageView mImageView03;
private Button mButton;
private TextView mText;
/*声明长度为3的int数组,并将三张牌的id放入
R.drawable.p01:红桃A
R.drawable.p02:黑桃2
R.drawable.p03:梅花3
R.drawable.p04:扑克牌背面*/
private static int[] s1=
new int[]{R.drawable.p01,R.drawable.p02,R.drawable.p03};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/*加载main.xml Layout */
setContentView(R.layout.main);
/* 取得相关对象 */
mText=(TextView)findViewById(R.id.mText);
mImageView01=(ImageView)findViewById(R.id.mImage01);
mImageView02=(ImageView)findViewById(R.id.mImage02);
mImageView03=(ImageView)findViewById(R.id.mImage03);
mButton=(Button)findViewById(R.id.mButton);
/* 运行洗牌程序 */
randon();
/* 替mImageView01添加onClickListener*/
mImageView01.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
/* 三张牌同时翻面,并将未选择的两张牌变透明 */
mImageView01.setImageDrawable(getResources()
.getDrawable(s1[0]));
mImageView02.setImageDrawable(getResources()
.getDrawable(s1[1]));
mImageView03.setImageDrawable(getResources()
.getDrawable(s1[2]));
mImageView02.setAlpha(100);
mImageView03.setAlpha(100);
/* 依有没有猜对来决定TextView要显示的信息 */
if(s1[0]==R.drawable.p01)
{
mText.setText("哇!你猜对了喔!!拍拍手!");
}
else
{
mText.setText("你猜错了喔!!要不要再试一次?");
}
}
});
/* 替mImageView02添加onClickListener*/
mImageView02.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
/* 三张牌同时翻面,并将未选择的两张牌变透明 */
mImageView01.setImageDrawable(getResources()
.getDrawable(s1[0]));
mImageView02.setImageDrawable(getResources()
.getDrawable(s1[1]));
mImageView03.setImageDrawable(getResources()
.getDrawable(s1[2]));
mImageView01.setAlpha(100);
mImageView03.setAlpha(100);
/* 依有没有猜对来决定TextView要显示的信息 */
if(s1[1]==R.drawable.p01)
{
mText.setText("哇!你猜对了喔!!拍拍手!");
}
else
{
mText.setText("你猜错了喔!!要不要再试一次?");
}
}
});
/* 替mImageView03添加onClickListener*/
mImageView03.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
/* 三张牌同时翻面,并将未选择的两张牌变透明 */
mImageView01.setImageDrawable(getResources()
.getDrawable(s1[0]));
mImageView02.setImageDrawable(getResources()
.getDrawable(s1[1]));
mImageView03.setImageDrawable(getResources()
.getDrawable(s1[2]));
mImageView01.setAlpha(100);
mImageView02.setAlpha(100);
/* 依有没有猜对来决定TextView要显示的信息 */
if(s1[2]==R.drawable.p01)
{
mText.setText("哇!你猜对了喔!!拍拍手!");
}
else
{
mText.setText("你猜错了喔!!要不要再试一次?");
}
}
});
/* 单击Button后三张牌都翻为背面且重新洗牌*/
mButton.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
mText.setText("猜猜看红桃A是哪一张?");
mImageView01.setImageDrawable(getResources()
.getDrawable(R.drawable.p04));
mImageView02.setImageDrawable(getResources()
.getDrawable(R.drawable.p04));
mImageView03.setImageDrawable(getResources()
.getDrawable(R.drawable.p04));
mImageView01.setAlpha(255);
mImageView02.setAlpha(255);
mImageView03.setAlpha(255);
randon();
}
});
}
/*重新洗牌的程序*/
private void randon()
{
for(int i=0;i<3;i++)
{
int tmp=s1[i];
int s=(int)(Math.random()*2);
s1[i]=s1[s];
s1[s]=tmp;
}
}
}
扩展学习
本范例仅运用ImageView的onClick事件,就实现出一个简单的猜牌小游戏,其中洗牌的randon()方法为众多随机洗牌方式的其中一种,各位也可以尝试用其他的方法来改写。
程序中为了视觉的效果,使用了ImageView的setAlpha(int alpha)方法,将没选到的两张牌设置透明度为100,没选到的牌变透明了,选到的那一张牌自然就突显了出来,其中alpha值255即为没有透明度的意思,所以,才会在“再玩一次”按钮的onClick事件中将三张牌的alpha值都重设为255。
android小程序--猜猜红桃A在哪儿相关推荐
- 猜猜红桃A在哪里(ImageView单击事件与透明度处理)
猜猜红桃A在哪里(ImageView单击事件与透明度处理) 新建一个继承Activity类的ImageViewGameActivity,并设置布局文件为:imageviewgame.xml. 首先定义 ...
- 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结
用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...
- android小程序:计算圆面积
网络111 葛鹏 此程序主要实现的功能是输入圆的半径,点击计算按钮,程序便会自动计算出圆的面积. 知识点: 1.为什么要选择android. 2.了解各控件的用处. 3.避免在代码中死记硬背,注意灵活 ...
- 纯css svg 改变图片颜色 ios android 小程序
本文出自: http://blog.csdn.net/wyk304443164 使用的是 filter drop-shadow 如果你只想兼容 Chrome 那么请看: http://www.zhan ...
- 做最漂亮的玩Android小程序第三版
做最漂亮的[玩Android小程序]V3.0 相较于第二个版本的更新: 整体重构了API请求.因为写这个小程序的时间比较早了,那个时候的玩安卓开放API还未支持HTTPS,导致无法上线小程序,所以为了 ...
- 黑桃8形式的c语言编程,C语言的随机发牌程序(红桃、黑桃、梅花、方块)
做一个随机发牌的C语言程序,供大家学习,思考. 未做任何注释,有测试时候留下的一些输出语句,一遍方便测试. /* author:nunu qq:398269786 */ #include #inclu ...
- C语言的随机发牌程序(红桃、黑桃、梅花、方块)
做一个随机发牌的C语言程序,供大家学习,思考. 未做任何注释,有测试时候留下的一些输出语句,一遍方便测试. /* author:nunu qq:398269786 */ #include<std ...
- android小程序源代码_我从 Android 转到微信小程序的思考
大家好,好久不见,我是陈宇明,公众号「码个蛋」主理人. 由于最近工作比较忙,这两年来很少和大家分享自己的收获,期间大部分都是由「码个蛋」运营小组打理. 上个月我参加了腾讯官方举办的<小程序云开发 ...
- android小程序下线,关闭小程序
请移步 新的文档.此文档以停止更新 关闭小程序 2.6.3开始支持此功能 小程序环境 注:此方法需要在集成SDK的原生工程中使用,在HBuilderX 内置基座运行无效果: 小程序中可调用plus.r ...
最新文章
- c++operators(运算符)
- 数学趣题——魔幻方阵
- SpeedyCloud研发总监李孟:不要让底层细节被上层打败
- hdu_1728_逃离迷宫(bfs)
- CSS position(定位)属性
- [Python] 程序结构与控制流
- python matplotlib相关 dateutil
- python手机销售系统结论于心得_python实现手机销售管理系统
- 压测学习总结(5)——如何使用Jmeter 进行简单的并发操作
- python自动化办公真的好用吗-python如何实现自动化办公?
- [emuch.net]MatrixComputations(7-12)
- EXCHANGE 2003 恢复存储组的使用
- Java JDK 8的安装与配置
- 毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
- 计算机组装流程,电脑组装教程
- 陈旿 计算机网络,西北工业大学陈旿教授应邀来校作网络信息安全讲座
- 流量贵如金,APP推广如何迈好第一步?技术和策略缺一不可
- shell win10 改成cmd_Win10小技巧:如何将在此处打开命令改为CMD或Powershell?
- java实现远程控制
- python max函数_python的max函数的用法
热门文章
- python之三神器
- TestNG+Allure生成测试报告
- Qt-FFmpeg开发-打开本地摄像头(6)
- 区块链开发公司发展前景广 区块链技术真的重要吗
- IEEE conference latex模板自己电脑编译后变形、字体显示异常的解决方法
- 劳务派遣与劳务外包的区别
- python 按照cpu的使用率对top中的进程排序(排序表格)
- 美赛算法及MATLAB代码,美赛常用算法及matlab代码——(3)熵权法
- asp.net--站点构架(页首设计)
- php 微信支付开发测试,微信支付PHP SDK —— 公众号支付代码详解