You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android如何获取ImageView当前图片名并实现条件判断

Xamarin Android 获取ImageView当前图片并做匹配判断的实现方案

原代码存在的问题

  • 第二个ImageView(imageViewLf)的点击事件逻辑错误,操作的是imageViewUf控件,无法正常切换自身图片
  • 两个ImageView共用同一个计数变量numberUf,点击任意一个控件都会累加同一个计数,切换逻辑混乱
  • 图片匹配判断逻辑只执行一次,不会在每次点击切换图片后自动触发
  • 没有记录当前显示的图片资源标识,无法直接完成比对

最优实现方式

不需要反向从ImageView控件读取资源名称,直接在切换图片时记录当前设置的资源ID即可,性能更好也不会出现兼容问题,完整实现代码如下:

  1. 先在Activity类中定义全局变量,避免方法执行完变量被回收
// 两个ImageView各自的点击计数
private int _clickCountUf = 0;
private int _clickCountLf = 0;
// 记录两个ImageView当前显示的图片资源ID
private int _currentImgResUf;
private int _currentImgResLf;

// 控件声明
private ImageView _imgUf;
private ImageView _imgLf;
private TextView _resultTv;
  1. 在OnCreate生命周期方法中初始化控件、绑定点击事件
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    // 替换成你自己的布局文件名
    SetContentView(Resource.Layout.Main);

    // 初始化控件
    _imgUf = FindViewById<ImageView>(Resource.Id.imageView1);
    _imgLf = FindViewById<ImageView>(Resource.Id.imageView2);
    _resultTv = FindViewById<TextView>(Resource.Id.textView1);

    // 绑定第一个ImageView点击切换事件
    _imgUf.Click += (s, e) =>
    {
        _clickCountUf++;
        // 如果需要循环切换,超过2次就回到第一张,不需要循环可以删掉下面这行
        if (_clickCountUf > 2) _clickCountUf = 1;

        switch (_clickCountUf)
        {
            case 1:
                _currentImgResUf = Resource.Drawable.a03SF9AP56UF;
                break;
            case 2:
                _currentImgResUf = Resource.Drawable.a01SF5BP52UF;
                break;
        }
        _imgUf.SetImageResource(_currentImgResUf);
        // 切换完成后检查匹配状态
        CheckMatchRule();
    };

    // 绑定第二个ImageView点击切换事件
    _imgLf.Click += (s, e) =>
    {
        _clickCountLf++;
        // 循环切换逻辑,不需要可以删掉
        if (_clickCountLf > 2) _clickCountLf = 1;

        switch (_clickCountLf)
        {
            case 1:
                _currentImgResLf = Resource.Drawable.a02SF8BP55LF;
                break;
            case 2:
                _currentImgResLf = Resource.Drawable.a03SF9BP56LF;
                break;
        }
        _imgLf.SetImageResource(_currentImgResLf);
        // 切换完成后检查匹配状态
        CheckMatchRule();
    };
}
  1. 单独封装匹配规则判断方法,每次切换图片后调用
private void CheckMatchRule()
{
    // 直接比对资源ID,比转字符串比对名称效率更高
    if (_currentImgResUf == Resource.Drawable.a03SF9AP56UF && _currentImgResLf == Resource.Drawable.a03SF9BP56LF)
    {
        _resultTv.Text = "something";
    }
    // 可以按需增加更多条件分支,对应不同的展示文本
    else
    {
        _resultTv.Text = string.Empty; // 不满足条件时清空文本或设置默认值
    }
}

补充说明

  • 如果确实需要获取图片对应的资源名称,可以通过Resources.GetResourceEntryName(资源ID)方法获取,比如Resources.GetResourceEntryName(_currentImgResUf)就会返回对应drawable的文件名字符串,但非必要不建议用字符串做判断,资源ID是整数类型,比对性能更高也不会出现拼写错误。
  • 代码中已经修正了原代码里控件操作错误、计数器共用的问题,直接替换原有逻辑即可运行。

内容的提问来源于stack exchange,提问作者arian ahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:12:57