Создание интерактивного изображения в GridView в Android

голоса
11

У меня есть изображения , отображаемые в GridView , как в этом учебнике . Я хочу быть в состоянии нажать на одно изображение и делать другие события , и мне нужно знать , что изображение было щелкнул.

Должен ли я добавить imageView.onKeyDown (KEYCODE, событие) в классе ImageAdapter? Вот код, как она существует в настоящее время:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ImageView imageView;
  if (convertView == null) {  
    // if it's not recycled, initialize some attributes
    imageView = new ImageView(mContext);
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);
    //does this need imageView.onKeyDown(keyCode, event)?
  } 
  else {
    imageView = (ImageView) convertView;
  }

  imageView.setImageResource(mThumbIds[position]);
  return imageView;
}

Как это будет означать, что изображение было щелкнули? Как создать правильный обработчик?

Задан 10/04/2009 в 21:50
источник пользователем
На других языках...                            


3 ответов

голоса
24

Для GridView вы можете использовать метод setOnItemClickListener иметь OnItemClickListener слушателя. Этот слушатель даст вам метод, который вы должны переопределить с подписью

onItemClick(AdapterView<?> parent, View v, int position, long id)

где вы получите позицию элемента в сетке, которая была нажата, и вид, который находится внутри ячейки сетки. Это то, что вам нужно?

Ответил 17/04/2009 d 09:25
источник пользователем

голоса
6

я попробовал вышеупомянутый метод GetView (конечное положение INT...) понял, что позиция получила «сбросить» после того, как 28 элементов и позиции, когда обратно в 0 после 28-го элемента в GridView.

я подозревал, что окончательное ключевое слово создает проблему и после его удаления я был в состоянии получить свои позиции, как и ожидалось.

Ниже приведен пример код с событием мыши вызывается в деятельности, которая демонстрирующая GridView.

public class MainActivity extends Activity {

ArrayList<Integer> item_ids = new ArrayList<Integer>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    item_ids = //get your item ids method

    GridView gridview = (GridView) findViewById(R.id.grid_featured);
    gridview.setAdapter(new ImageAdapter(this));
    gridview.setOnItemClickListener(itemClickListener);

    footer = (Footer)findViewById(R.id.layoutFooter);
    footer.setActivity(this);
}

private OnItemClickListener itemClickListener = new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Log.d(TAG,"Position Clicked ["+position+"] with item id ["+item_ids.get(position)+"]");
    }
};

}

Ответил 26/04/2011 d 11:44
источник пользователем

голоса
6

Я был в состоянии получить положение щелкнул изображения, сделав положение окончательным и добавление слушателя OnClick к ImageView. Это регистрирует положение изображения, которая была нажата.

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
  ImageView imageView;
  if (convertView == null) {  
    // if it's not recycled, initialize some attributes
    imageView = new ImageView(mContext);
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);


    imageView.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        Log.d("onClick","position ["+position+"]");
      }

    });

  } 
  else {
    imageView = (ImageView) convertView;
  }

  imageView.setImageResource(mThumbIds[position]);
  return imageView;
}
Ответил 11/04/2009 d 16:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more