【问题标题】:How to detect which imageview was selected/clicked when clicking another button单击另一个按钮时如何检测选择/单击了哪个图像视图
【发布时间】:2019-02-18 17:04:59
【问题描述】:

我正在尝试制作一个程序,其中有 3 个图像视图、2 个名为翻转和旋转的按钮以及一个方向键。我还没有弄清楚如何保存点击了哪个imageview,所以目前只有一个特定的作品。

这是我的 mainactivity.java:

package com.mdadi.animals;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public void onClick(View v) {
    ImageView cat = findViewById(R.id.cat);
    int tenDpAsPx = (int) 
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, 
getResources().getDisplayMetrics());


    switch (v.getId()) {
        case R.id.bird:
            findViewById(R.id.bird_desc).setVisibility(View.VISIBLE);
            //Cat & Dog TextViews set to invisible
            findViewById(R.id.cat_desc).setVisibility(View.INVISIBLE);
            findViewById(R.id.dog_desc).setVisibility(View.INVISIBLE);
            break;
        case R.id.cat:
            findViewById(R.id.cat_desc).setVisibility(View.VISIBLE);
            //Bird & Dog TextViews set to invisible
            findViewById(R.id.bird_desc).setVisibility(View.INVISIBLE);
            findViewById(R.id.dog_desc).setVisibility(View.INVISIBLE);
            break;
        case R.id.dog:
            findViewById(R.id.dog_desc).setVisibility(View.VISIBLE);
            //Bird & Cat TextViews set to invisible
            findViewById(R.id.bird_desc).setVisibility(View.INVISIBLE);
            findViewById(R.id.cat_desc).setVisibility(View.INVISIBLE);
            break;
        default:
            break;
    }
    //Check which button is clicked and execute relevant code
    switch (v.getId()) {
        case R.id.centerBtn: //Reset ImgView translation to original position
            cat.setTranslationX(0);
            cat.setTranslationY(0);
            break;
        case R.id.upArrow: //Move ImgView up ^
            cat.setTranslationY(cat.getTranslationY() - tenDpAsPx);
            break;
        case R.id.downArrow: //Move ImgView down v
            cat.setTranslationY(cat.getTranslationY() + tenDpAsPx);
            break;
        case R.id.leftArrow: //Move ImgView to the left <-
            cat.setTranslationX(cat.getTranslationX() - tenDpAsPx);
            break;
        case R.id.rightArrow: //Move ImgView to the right ->
            cat.setTranslationX(cat.getTranslationX() + tenDpAsPx);
            break;
        case R.id.rotateBtn: //Rotate ImgView 90 degrees clockwise
            cat.setRotation(cat.getRotation() + 90);
            break;
        case R.id.flipBtn: //Flip ImgView about its y axis (horizontally)
            cat.setRotationY(cat.getRotationY() + 180);
            break;
        default:
            break;
    }
}
}

activity_main xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingEnd="16dp"
tools:context=".MainActivity">

<Button
    android:id="@+id/rotateBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="10dp"
    android:onClick="onClick"
    android:text="@string/rotate_button" />

<Button
    android:id="@+id/flipBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="10dp"
    android:layout_toEndOf="@+id/rotateBtn"
    android:onClick="onClick"
    android:text="@string/flip_button" />

<ImageButton
    android:id="@+id/centerBtn"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_above="@id/downArrow"
    android:layout_toStartOf="@id/rightArrow"
    android:background="@android:color/transparent"
    android:onClick="onClick"
    android:src="@drawable/ic_filter_center_focus_black_24dp" />

<ImageButton
    android:id="@+id/leftArrow"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dp"
    android:layout_toStartOf="@+id/centerBtn"
    android:background="@android:color/transparent"
    android:onClick="onClick"
    android:src="@drawable/ic_arrow_back_black_24dp" />

<ImageButton
    android:id="@+id/rightArrow"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dp"
    android:background="@android:color/transparent"
    android:onClick="onClick"
    android:src="@drawable/ic_arrow_forward_black_24dp" />

<ImageButton
    android:id="@+id/upArrow"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_above="@+id/centerBtn"
    android:layout_alignParentEnd="true"
    android:layout_marginEnd="35dp"
    android:background="@android:color/transparent"
    android:onClick="onClick"
    android:src="@drawable/ic_arrow_upward_black_24dp" />

<ImageButton
    android:id="@+id/downArrow"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:layout_marginEnd="35dp"
    android:layout_marginBottom="15dp"
    android:background="@android:color/transparent"
    android:onClick="onClick"
    android:src="@drawable/ic_arrow_downward_black_24dp" />

<ImageView
    android:id="@+id/bird"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="100dp"
    android:onClick="onClick"
    android:src="@drawable/bird" />

<ImageView
    android:id="@+id/cat"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/bird"
    android:layout_marginBottom="100dp"
    android:onClick="onClick"
    android:src="@drawable/cat" />

<ImageView
    android:id="@+id/dog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/cat"
    android:onClick="onClick"
    android:src="@drawable/dog" />

<TextView
    android:id="@+id/bird_desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/bird"
    android:text="@string/bird"
    android:visibility="invisible"/>

<TextView
    android:id="@+id/cat_desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/cat"
    android:layout_below="@+id/bird"
    android:text="@string/cat"
    android:visibility="invisible"/>

<TextView
    android:id="@+id/dog_desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/dog"
    android:layout_below="@+id/cat"
    android:text="@string/dog"
    android:visibility="invisible"/>

</RelativeLayout>

我将如何保存点击了哪个 imgview?

【问题讨论】:

    标签: android android-layout android-view


    【解决方案1】:

    如何创建一个名为 selectedImageint 并在每次单击图像时为 selectedImage 示例赋值: 单击图像时selectedImage = 1。 并在您的代码中检查 selectedImage 的值并为足够的图像做这项工作

    【讨论】:

      【解决方案2】:

      让你的布局像这样:

      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:paddingTop="3dp">
          <ImageView
              android:id="@+id/btn1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"/>
          <ImageButton
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:onClick="myfunction"/>
      </LinearLayout>
      

      所以我猜你只想跟踪点击了哪个imageView。因此,为此,您可以做的是创建一个整数值,然后将图像的索引存储在那里。

      例如,如果您有 3 张图片,则:

      public void myfunction(View view){
        switch(view.getParent()){
      //tells you which linearlayout was clicked
      }
      }
      

      您可以稍后通过访问此变量来跟踪点击了哪个图像。 此外,如果您甚至想跟踪被点击的图像,那么您可以使用 ArrayListInteger,然后继续在此处添加值。

      【讨论】:

        【解决方案3】:

        要在按钮单击时检测图像视图,请在数组列表中添加选定的图像视图,然后单击按钮从数组列表中获取所有图像视图 ID 和标签,如下所示:

        代码

        在 imageclick 上添加视图

         case R.id.img_2:
                    if (!imgviewlist.contains(img_2)) {
                        imgviewlist.add(img_2);
                    }
                    break;
        

        按钮点击时获取视图

          case R.id.btn_1:
                    /*get selected images form array*/
                    for (int j = 0; j < imgviewlist.size(); j++) {
                        ImageView imageView = imgviewlist.get(j);
                        Log.e("get_imageview_id", "" + imageView.getId());
                        Log.e("get_imageview_tag", "" + imageView.getTag());
                    }
                    break;
        

        完整代码

        public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
        Button btn_1;
        ImageView img_3, img_2, img_1;
        ArrayList<ImageView> imgviewlist = new ArrayList<>();
        
        @SuppressLint("ResourceType")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            /*intilize views*/
            btn_1 = findViewById(R.id.btn_1);
            img_3 = findViewById(R.id.img_3);
            img_2 = findViewById(R.id.img_2);
            img_1 = findViewById(R.id.img_1);
            /*set on click listener*/
            btn_1.setOnClickListener(this);
            img_3.setOnClickListener(this);
            img_2.setOnClickListener(this);
            img_1.setOnClickListener(this);
        
            /*set tag*/
            img_1.setTag("img_1");
            img_2.setTag("img_2");
            img_3.setTag("img_3");
        
        }
        
        
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.btn_1:
                    /*get selected images form array*/
                    for (int j = 0; j < imgviewlist.size(); j++) {
                        ImageView imageView = imgviewlist.get(j);
                        Log.e("get_imageview_id", "" + imageView.getId());
                        Log.e("get_imageview_tag", "" + imageView.getTag());
                    }
                    break;
                case R.id.img_1:
                    //check item already exist or not
                    if (!imgviewlist.contains(img_1)) {
                        imgviewlist.add(img_1);  //add imageview in array
                    }
        
                    break;
                case R.id.img_2:
                    if (!imgviewlist.contains(img_2)) {
                        imgviewlist.add(img_2);
                    }
                    break;
                case R.id.img_3:
                    if (!imgviewlist.contains(img_3)) {
                        imgviewlist.add(img_3);
                    }
                    break;
        
            }
        }
         }
        

        【讨论】:

          猜你喜欢
          • 2014-10-09
          • 1970-01-01
          • 1970-01-01
          • 2021-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多