【问题标题】:How can I swap images on button click?如何在按钮单击时交换图像?
【发布时间】:2019-06-05 01:01:48
【问题描述】:

基本上所有 ImageButton 必须做的 (InactiveButton) 就是在按下时切换到图像。我不知道从哪里开始,因为我是 Android Studio 的新手。

我尝试过使用选择器类,但我不知道它应该完成什么。当我使用 public void buttonOnClick(View v) 等其他代码时,android studio 说它已被弃用?

XML 布局:

<ImageButton
    android:id="@+id/InactiveButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/button_default" />

编辑 1:我添加了以下代码,但仍然在第 52 行得到一个 "annotations are not allowed here" @override,并且 cannot resolve symbol v 在行53.

Picture of error

编辑 2:第 50 行的最终错误图像

Location of error

Actual Compiler Message

【问题讨论】:

  • 另一个建议,如果您的所有边距都具有相同的 dp,那么您可以直接使用 layout_margin = "8dp" 并且效果相同

标签: java android android-imagebutton


【解决方案1】:

Ferran 所说的完全正确。

你需要以正确的方式实现它。

首先在 onCreate 方法之前定义您的图像视图,以便将其视为全局变量,这样做的好处是您可以在同一活动中的任何地方使用它。 喜欢 ImageButton inactiveButton;

其次,在 onCreate 方法中使用 FindViewById 找到它的视图。 喜欢 inactiveButton = convertView.findViewById(R.id.InactiveButton);

接下来,你可以通过两种方式在inactiveButton上实现onClickListener: 1. 您可以使用inactiveButton.setOnClickListener(this) 为您的活动实现“实现View.OnClickListener”;这将提示您对您的活动或片段实施“android.view.View.OnClickListener”。实现此方法,这将添加 onClick 方法,在这里您可以编写代码来更改图像按钮中的图像

 @Override
    public void onClick(View v) {
          // add this, this will help you to implement multiple clicklisteners and you can add different methods in each click listener
        switch (v.getId())
        {
            case R.id.InactiveButton:
                 inactiveButton.setImageResource(R.drawable.otherimage);
                break;
            default:break;
        }
    }

  1. 可以直接写OnClickListener,需要在main方法中保留这个
     inactiveButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       inactiveButton.setImageResource(R.drawable.otherimage); 
                    }
                });

希望这会对您有所帮助。我知道我已经添加了很多信息,但我认为从长远来看它会对您有所帮助。您可以检查图像以获得更清晰的图像,然后您可以轻松地了解您的缺陷。

问候 安缦普瑞特

【讨论】:

    【解决方案2】:

    您可以像这样更改图像:

    ImageView someImageView= (ImageView) findViewById(R.id.some_image_view);
    imageView.setImageResource(R.drawable.some_image);
    

    【讨论】:

      【解决方案3】:

      在您的onCreate 方法中来自您的Activity

      ImageButton inactiveButton = convertView.findViewById(R.id.InactiveButton);
      

      现在,您可以参考您的 ImageView

      然后,您需要定义单击它时要执行的操作。

          inactiveButton .setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // put here the code when ImageView is clicked
      
                  // to change the ImageView image  
                  inactiveButton.setImageResource(R.drawable.otherimage);
              }
          });
      

      就是这样。

      【讨论】:

      • 嘿,我尝试将您的代码添加到 mainactivity java 中,但出现了一些我不知道如何修复的错误。我会在上面发布它的样子。
      • 对不起,我弄错了。您的按钮是ImageButton 而不是ImageView。请在第一行更改此设置并尝试。我已经编辑了我的答案...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多