Как определить, какое изображение было выбрано / нажато при нажатии другой кнопки - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать программу, в которой есть 3 изображения, 2 кнопки с переворотом и поворотом, а также указатель направления.Я не понял, как сохранить то, какое изображение было кликнуто, поэтому в настоящее время работает только конкретное.

Вот мой 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?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Как насчет создания int с именем selectedImage, и каждый раз, когда вы нажимаете на изображение, вы присваиваете значение selectedImage например: при нажатии на изображение 1 selectedImage = 1.И в вашем коде проверьте значение selectedImage и сделайте работу для адекватного изображения

0 голосов
/ 19 февраля 2019

Чтобы обнаружить просмотр изображения по нажатию кнопки, добавьте выбранные просмотры изображений в arraylist, и по нажатию кнопки получите все id и тег просмотра изображения из arraylist, например:

Код

Добавление просмотров на изображениеclick

 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;

    }
}
 }
0 голосов
/ 18 февраля 2019

Сделайте ваш макет следующим образом:

<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
}
}

Выможет позже отследить, какое изображение было кликнуто путем доступа к этой переменной.Также, если вы хотите отслеживать отслеживаемые изображения, вы можете использовать ArrayList из Integer, а затем просто добавлять туда значения.

...