Изменение исходного изображения для всех фонов при нажатии изображения - PullRequest
1 голос
/ 21 апреля 2020

Я хотел бы изменить фон всех слоев, когда я нажимаю на изображение, например, это изображение имеет предварительный просмотр желтого цвета, но когда я нажимаю на него, я хотел бы изменить фон на изображение с именем fondoamarillo .jpg, мой слой называется colores, а мой kt - Colores

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/mainln"
android:layout_height="match_parent"
android:background="@drawable/fondoazul">

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="175dp"
    android:layout_height="104dp"
    android:layout_marginStart="70dp"
    android:layout_marginTop="28dp"
    android:layout_marginEnd="71dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.505"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/iccol" />

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="200dp"
    android:layout_height="52dp"
    android:layout_marginStart="104dp"
    android:layout_marginTop="12dp"
    android:layout_marginEnd="104dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.333"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageView2"
    app:srcCompat="@drawable/coloress" />

<ImageView
    android:id="@+id/imageView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="28dp"
    android:onClick="onAtrasConfig"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/atras" />

<ImageView
    android:id="@+id/imageView42"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="41dp"
    android:layout_marginTop="89dp"
    android:layout_marginBottom="214dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageView44"
    app:layout_constraintTop_toBottomOf="@+id/imageView45"
    app:srcCompat="@drawable/verde" />

<ImageView
    android:id="@+id/imageView45"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="41dp"
    android:layout_marginTop="55dp"
    app:layout_constraintStart_toEndOf="@+id/imageView41"
    app:layout_constraintTop_toBottomOf="@+id/imageView3"
    app:srcCompat="@drawable/aguamarina" />


<ImageView
    android:id="@+id/imageView41"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="55dp"
    android:onClick="changeAllBackground"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageView3"
    app:srcCompat="@drawable/amarillo" />


<ImageView
    android:id="@+id/imageView46"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="41dp"
    android:layout_marginTop="89dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="214dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageView42"
    app:layout_constraintTop_toBottomOf="@+id/imageView43"
    app:srcCompat="@drawable/rosa" />

<ImageView
    android:id="@+id/imageView44"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="11dp"
    android:layout_marginTop="89dp"
    android:layout_marginBottom="214dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageView41"
    app:srcCompat="@drawable/azul" />

<ImageView
    android:id="@+id/imageView43"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="41dp"
    android:layout_marginTop="55dp"
    android:layout_marginEnd="16dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageView45"
    app:layout_constraintTop_toBottomOf="@+id/imageView3"
    app:srcCompat="@drawable/rojo" />

Это .kt

class Colores : AppCompatActivity(){

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.colores)
}

fun onAtrasConfig(view: View){
    try {
        val intent: Intent = Intent(this, Configuracion::class.java)
        startActivity(intent)
    }catch (e: Exception){
        e.printStackTrace()
    }
}

fun changeAllBackground(mainLayout:View) {
    val mainln: ConstraintLayout = findViewById(R.id.mainln)
    mainln.background = getDrawable(R.drawable.fondoamarillo)
}}

This is my xml and I would like to click the imageView or Button

This should be the new background when I click the new imageView or Button

Ответы [ 4 ]

1 голос
/ 25 апреля 2020

Хорошо, тогда вы можете использовать эту функцию, которую я только что создал. он всегда нуждается в макете вашего держателя просмотров. Например, если вы хотите перехватить все слои, вы можете отправить свой основной макет, и не имеет значения, какой тип вашего основного макета, все хорошо до go и изменит фон на изображение, которое вы мне сказали.

Java Версия:

    private void changeAllBackground(ViewGroup mainLayout){
        for(int i=0; i<mainLayout.getChildCount();i++){
            View v = mainLayout.getChildAt(i);
            //this is where you put what you want to do with the layer
            v.setBackgroundResource(R.drawable.fondoamarillo);
            if(v instanceof ViewGroup)
                changeAllBackground(((ViewGroup)v));
        }
    }

Kotlin версия:

private fun changeAllBackground(mainLayout:ViewGroup) {
  for (i in 0 until mainLayout.getChildCount())
  {
    val v = mainLayout.getChildAt(i)
    //this is where you put what you want to do with the layer
    v.setBackgroundResource(R.drawable.fondoamarillo)
    if (v is ViewGroup){
        changeAllBackground((v as ViewGroup))
    }
  }
}
0 голосов
/ 26 апреля 2020

Я думаю, что это будет работать

 imageView41.setOnClickListener {
            colores.background = getDrawable(R.drawable.fondoamarillo)
        }

в противном случае

fun onCambio(view: View){

colores.background = getDrawable(R.drawable.fondoamarillo)

}}

Ваш вопрос для меня до сих пор неясен.

для того, что я понимаю, у вас есть imageView(@+id/imageView41), которые показывают желтый цвет после нажатия imageView(@+id/imageView41), он изменит layer or layout?(@+id/colores) на fondoamarillo.jpg, вы также упоминаете, что ваш kt называется "Colores"

что-то для меня все еще неясно:

что делает ваш Colores.kt?

если вам действительно нужна помощь, я считаю, что вам нужно показать свою MainActivity или активность, которая нажмите на это изображение, а также файл макета xml и Colores.kt тоже

0 голосов
/ 24 апреля 2020

Я не совсем уверен, чего вы хотите достичь. если вы просто хотите изменить фон вашего imageview41, вы можете попробовать

fun onCambio(view: View){

view.setImageResource(R.drawable.fondoamarillo)

//setBackgroundResource change the background of the imageView
view.setBackgroundResource(R.drawable.fondoamarillo);

}}

, так как вы ссылаетесь на onCambio в xml, я думаю, вам не нужно устанавливать onClickListener в kotlin. но учтите, что это изменит только фон этого одного вида, а не «все слои», как вы говорите.

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

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

(см. описание в чате), не задавайте никаких вопросов, связанных с настройками)

0 голосов
/ 21 апреля 2020

Вы можете установить изображение программно по клику этого изображения.

imageView41.setOnClickListener {

            imageView41.setImageResource(R.drawable.fondoamarillo)

            //setBackgroundResource change the background of the imageView            
            imageView41.setBackgroundResource(R.drawable.fondoamarillo);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...