当前位置: 首页 > 知识库问答 >
问题:

android中drawables和imageButtons的比较

益承颜
2023-03-14

我有6个图像按钮与绘图,我试图使用getDrawable()比较它们。这是我的xml代码

"'

xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TicTacToe">

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="25dp"
    android:layout_marginTop="147dp"
    android:layout_marginEnd="5dp"
    android:layout_marginBottom="14dp"
    android:onClick="change"
    app:layout_constraintBottom_toTopOf="@+id/imageButton2"
    app:layout_constraintEnd_toStartOf="@+id/imageButton01"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton01"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginTop="147dp"
    android:layout_marginEnd="5dp"
    android:layout_marginBottom="14dp"
    android:onClick="change"
    app:layout_constraintBottom_toTopOf="@+id/imageButton02"
    app:layout_constraintEnd_toStartOf="@+id/imageButton001"
    app:layout_constraintStart_toEndOf="@+id/imageButton1"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="24dp"
    android:layout_marginEnd="6dp"
    android:layout_marginBottom="10dp"
    android:onClick="change"
    app:layout_constraintBottom_toTopOf="@+id/imageButton3"
    app:layout_constraintEnd_toStartOf="@+id/imageButton02"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageButton1"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton001"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginTop="148dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="13dp"
    android:onClick="change"
    app:layout_constraintBottom_toTopOf="@+id/imageButton002"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageButton01"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton02"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginEnd="7dp"
    android:layout_marginBottom="10dp"
    android:onClick="change"
    app:layout_constraintBottom_toTopOf="@+id/imageButton03"
    app:layout_constraintEnd_toStartOf="@+id/imageButton002"
    app:layout_constraintStart_toEndOf="@+id/imageButton2"
    app:layout_constraintTop_toBottomOf="@+id/imageButton01"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton002"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginEnd="14dp"
    android:layout_marginBottom="10dp"
    android:onClick="change"
    app:layout_constraintBottom_toTopOf="@+id/imageButton003"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageButton02"
    app:layout_constraintTop_toBottomOf="@+id/imageButton001"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton3"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="24dp"
    android:layout_marginEnd="6dp"
    android:layout_marginBottom="200dp"
    android:onClick="change"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/imageButton03"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageButton2"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton03"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginEnd="7dp"
    android:layout_marginBottom="200dp"
    android:onClick="change"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/imageButton003"
    app:layout_constraintStart_toEndOf="@+id/imageButton3"
    app:layout_constraintTop_toBottomOf="@+id/imageButton02"
    app:srcCompat="@drawable/blank" />

<ImageButton
    android:id="@+id/imageButton003"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginEnd="14dp"
    android:layout_marginBottom="200dp"
    android:onClick="change"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageButton03"
    app:layout_constraintTop_toBottomOf="@+id/imageButton002"
    app:srcCompat="@drawable/blank" />

"'

科特林代码

"'

类TicTacToe: AppCompat活动(){

var spot1: ImageButton? =null
var spot01: ImageButton? =null
var spot001: ImageButton? =null
var spot2: ImageButton? =null
var spot02: ImageButton? =null
var spot002: ImageButton? =null
var spot3: ImageButton? =null
var spot03: ImageButton? =null
var spot003: ImageButton? =null

override fun onCreate(savedInstanceState: Bundle?)

{

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_tic_tac_toe)
    spot1 = findViewById<ImageButton>(R.id.imageButton1)
    spot01 = findViewById<ImageButton>(R.id.imageButton01)
    spot001 = findViewById<ImageButton>(R.id.imageButton001)
    spot2 = findViewById<ImageButton>(R.id.imageButton2)
    spot02 = findViewById<ImageButton>(R.id.imageButton02)
    spot002 = findViewById<ImageButton>(R.id.imageButton002)
    spot3 = findViewById<ImageButton>(R.id.imageButton3)
    spot03 = findViewById<ImageButton>(R.id.imageButton03)

    spot003 = findViewById<ImageButton>(R.id.imageButton003)

}

val photos: IntArray= intArrayOf(R.drawable.x, R.drawable.o, R.drawable.blank)

var turn = 1
var winState = false

fun change(view: View){
    var spot = findViewById<ImageButton>(view.getId()) //as Button

    if(turn == 1) {
        spot.setImageResource(photos[0])
        turn = turn * -1
    }

    else{
        spot.setImageResource(photos[1])
        turn = turn * -1
    }

    if(spot1?.getDrawable() == spot01?.getDrawable() &&
        spot1?.getDrawable() == spot001?.getDrawable() &&
        spot1?.getDrawable() != photos[2].toDrawable())
    {
        winState = true;
        Toast.makeText(getApplicationContext(),"Winner",Toast.LENGTH_SHORT).show();
    }
}

}

"'

共有1个答案

董和风
2023-03-14

Drawable是一个对象,因此需要使用equals()方法进行比较。无论如何,我也不确定它是否会起作用,因为我不确定可绘制方法是如何实现该方法的,所以它可能不适合您的情况。

此外,您正在使用视图检查业务逻辑的状态,这一点都不理想。最好的解决方案是使用一张地图或一个矩阵(比方说,一个维数为[3][3]的数组),在这里存储单个点的实际值,然后将可绘制内容与矩阵中的值进行协调。

我知道这会影响代码中的所有内容,您必须对其进行重大更改,因此更快速的解决方案可能是在图像按钮上使用android:tag。可以在其上指定任何对象,因此也可以使用and Integer并对其进行比较,始终使用equals()方法。这意味着您可以依赖标记来实现逻辑。

 类似资料:
  • 自定义Drawables > 原文链接 : Custom Drawables 原文作者 : Ryan Harter 译文出自 : 开发技术前线 www.devtf.cn 译者 : SwinZh 校对者: Mr.Simple 状态 : 完成 我们都看过关于为什么你应该适当的使自定义Views和如何能帮助你正确的封装你的应用程序代码的帖子。但非视图相关的部分如何转化为我们apps的其他部分的这种思考方

  • 我使用矢量绘图在Android之前Lollipop和这些是我的一些库和工具版本: Android Studio: 2.0 AndroidGradle插件 构建工具:23.0.2 Android支持库:23.3.0 我在我的应用级别 还值得一提的是,我使用一个额外的绘图,如LayerDrawable(layer_list),如Android官方博客中所述(链接此处),用于为 你会发现直接引用应用程序

  • 本文向大家介绍Android Bitmap和Drawable的对比,包括了Android Bitmap和Drawable的对比的使用技巧和注意事项,需要的朋友参考一下 Android Bitmap和Drawable的对比 Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理

  • 我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s

  • 我正在开发一个语音信息应用程序,我需要比较两个声音, 通过录制语音向应用程序注册 通过录制语音向另一用户发送语音信息,但首先需要将此语音与配置文件中录制的语音进行比较 出于安全目的,需要知道记录的消息是否来自特定用户。 我试过了: 比较Android中的两种声音 http://www . dream incode . net/forums/topic/274280-using-FFT-to-com

  • 问题内容: 什么是在Android上解析JSON的最佳库。我知道Android框架内置了JSON库,而且我听说过GSON。但是我想知道是否有人比较了android上的各种JSON选项,并提出了一个选择另一个的理由。我认为性能和可用性是主要标准。 问题答案: 尽管有少数Java-to / from-JSONAPI提供了JSON与任意Java数据结构之间的轻松(基本)绑定,但Jackson和Gson到