Изменить поведение ImageButton - PullRequest
1 голос
/ 05 июля 2011

Имея этот XML-файл селектора:

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

 <item android:state_pressed="true"
       android:drawable="@drawable/z01_pressed" /> <!-- pressed -->

 <item  android:state_active="true"
        android:drawable="@drawable/z01_pressed" />

 <item android:state_focused="true"
       android:drawable="@drawable/z01_pressed" /> <!-- focused -->

 <item android:drawable="@drawable/z01" /> <!-- default -->

 </selector>

Могу ли я изменить его (или иметь программный способ), чтобы сделать это в Android:

Когда вы нажимаете и удерживаете кнопку ImageButton и перемещаетевы нажимаете на другую кнопку ImageButton, другая получает эффект (эффект нажатия), а первая возвращается в свое нормальное состояние.

Итак, если у вас на экране несколько кнопок и вы проводите пальцем по верхней частикаждый из них получает эффект нажатия, когда палец находится над ним

Можно ли это сделать в XML?Код?В API 4?или выше?

Возможно ли это вообще?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 января 2012

Для тех, кому это может быть интересно:

Я не смог найти решение своей проблемы на уровне API 4. Итак, я сдался!

0 голосов
/ 05 июля 2011

Вы можете сделать это, используя onTouchListener и объект Region для каждой кнопки. Сначала вам нужно найти размер каждой кнопки, чтобы можно было определить размер объектов Region:

EDIT:

final ImageButton button = (ImageButton) findViewById(R.id.imagebutton);
int width = 128; // The width of the button
int height = 64; // The height of the button
int[] pos = new int[2];
button.getLocationInWindow(pos);

final ImageButton button2 = (ImageButton) findViewById(R.id.imagebutton2);
int width2 = 128; // The width of the button
int height2 = 64; // The height of the button
int[] pos2 = new int[2];
button2.getLocationInWindow(pos2);

final Region region2 = new Region(pos2[0], pos2[1], pos2[0] + width, pos2[1] + height);

button.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { 
      if(region1.contains((int)event.getX(), (int)event.getY())) {
        button.setImageResource(R.drawable.z01_pressed);
        button2.setImageResource(R.drawable.z01);
      } else if(region2.contains((int)event.getX(), (int)event.getY())) {
        button2.setImageResource(R.drawable.z01_pressed);
        button.setImageResource(R.drawable.z01);
      else {
        button.setImageResource(R.drawable.z01);
        button2.setImageResource(R.drawable.z01);
      }
    }
    else {
      button.setImageResource(R.drawable.z01);
      button2.setImageResource(R.drawable.z01);
    }
    return false;
  }
});
...