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在哪儿相关推荐

  1. 猜猜红桃A在哪里(ImageView单击事件与透明度处理)

    猜猜红桃A在哪里(ImageView单击事件与透明度处理) 新建一个继承Activity类的ImageViewGameActivity,并设置布局文件为:imageviewgame.xml. 首先定义 ...

  2. 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结

    用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...

  3. android小程序:计算圆面积

    网络111 葛鹏 此程序主要实现的功能是输入圆的半径,点击计算按钮,程序便会自动计算出圆的面积. 知识点: 1.为什么要选择android. 2.了解各控件的用处. 3.避免在代码中死记硬背,注意灵活 ...

  4. 纯css svg 改变图片颜色 ios android 小程序

    本文出自: http://blog.csdn.net/wyk304443164 使用的是 filter drop-shadow 如果你只想兼容 Chrome 那么请看: http://www.zhan ...

  5. 做最漂亮的玩Android小程序第三版

    做最漂亮的[玩Android小程序]V3.0 相较于第二个版本的更新: 整体重构了API请求.因为写这个小程序的时间比较早了,那个时候的玩安卓开放API还未支持HTTPS,导致无法上线小程序,所以为了 ...

  6. 黑桃8形式的c语言编程,C语言的随机发牌程序(红桃、黑桃、梅花、方块)

    做一个随机发牌的C语言程序,供大家学习,思考. 未做任何注释,有测试时候留下的一些输出语句,一遍方便测试. /* author:nunu qq:398269786 */ #include #inclu ...

  7. C语言的随机发牌程序(红桃、黑桃、梅花、方块)

    做一个随机发牌的C语言程序,供大家学习,思考. 未做任何注释,有测试时候留下的一些输出语句,一遍方便测试. /* author:nunu qq:398269786 */ #include<std ...

  8. android小程序源代码_我从 Android 转到微信小程序的思考

    大家好,好久不见,我是陈宇明,公众号「码个蛋」主理人. 由于最近工作比较忙,这两年来很少和大家分享自己的收获,期间大部分都是由「码个蛋」运营小组打理. 上个月我参加了腾讯官方举办的<小程序云开发 ...

  9. android小程序下线,关闭小程序

    请移步 新的文档.此文档以停止更新 关闭小程序 2.6.3开始支持此功能 小程序环境 注:此方法需要在集成SDK的原生工程中使用,在HBuilderX 内置基座运行无效果: 小程序中可调用plus.r ...

最新文章

  1. c++operators(运算符)
  2. 数学趣题——魔幻方阵
  3. SpeedyCloud研发总监李孟:不要让底层细节被上层打败
  4. hdu_1728_逃离迷宫(bfs)
  5. CSS position(定位)属性
  6. [Python] 程序结构与控制流
  7. python matplotlib相关 dateutil
  8. python手机销售系统结论于心得_python实现手机销售管理系统
  9. 压测学习总结(5)——如何使用Jmeter 进行简单的并发操作
  10. python自动化办公真的好用吗-python如何实现自动化办公?
  11. [emuch.net]MatrixComputations(7-12)
  12. EXCHANGE 2003 恢复存储组的使用
  13. Java JDK 8的安装与配置
  14. 毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  15. 计算机组装流程,电脑组装教程
  16. 陈旿 计算机网络,西北工业大学陈旿教授应邀来校作网络信息安全讲座
  17. 流量贵如金,APP推广如何迈好第一步?技术和策略缺一不可
  18. shell win10 改成cmd_Win10小技巧:如何将在此处打开命令改为CMD或Powershell?
  19. java实现远程控制
  20. python max函数_python的max函数的用法

热门文章

  1. python之三神器
  2. TestNG+Allure生成测试报告
  3. Qt-FFmpeg开发-打开本地摄像头(6)
  4. 区块链开发公司发展前景广 区块链技术真的重要吗
  5. IEEE conference latex模板自己电脑编译后变形、字体显示异常的解决方法
  6. 劳务派遣与劳务外包的区别
  7. python 按照cpu的使用率对top中的进程排序(排序表格)
  8. 美赛算法及MATLAB代码,美赛常用算法及matlab代码——(3)熵权法
  9. asp.net--站点构架(页首设计)
  10. php 微信支付开发测试,微信支付PHP SDK —— 公众号支付代码详解