2013-11-08 3 views
0

Как изменить цвет изображения (а не фон!) Когда я выбираю элемент в макете GridView? Я перегрузил метод onItemClick(), но не совсем знаю, как обращаться к конкретному элементу адреса (выбранному).Динамическое изменение макета цвета изображения в строке в GridView

Ваш существующий код, row.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="5dp" > 

     <ImageView 
      android:id="@+id/rowImage" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:src="@drawable/ic_launcher" > 
     </ImageView> 

     <TextView 
      android:id="@+id/rowText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_marginTop="5dp" 
      android:textSize="15sp" 
      android:textStyle="bold" > 
     </TextView> 
</LinearLayout> 

activity_main.xml

:

ImageAdapter.class
<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnWidth="150dp" 
    android:gravity="center" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" > 

</GridView> 

: метод

package com.example.exchangemanager; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class ImageAdapter extends ArrayAdapter<Item> { 

    Context context; 
    int layoutResourceId; 
    ArrayList<Item> data = new ArrayList<Item>(); 

    public ImageAdapter(Context context, int layoutResourceId, 
      ArrayList<Item> data) { 
     super(context, layoutResourceId, data); 

     this.context = context; 
     this.layoutResourceId = layoutResourceId; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     RecordHolder holder = null; 

     if (row == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new RecordHolder(); 
      holder.textView = (TextView) row.findViewById(R.id.rowText); 
      holder.imageView = (ImageView) row.findViewById(R.id.rowImage); 
      row.setTag(holder); 
     } else { 
      holder = (RecordHolder) row.getTag(); 
     } 

     Item item = data.get(position); 
     holder.textView.setText(item.getTitle()); 
     holder.imageView.setImageBitmap(item.getImage()); 
      // My previous attempts 
     holder.imageView.setColorFilter(Color.GRAY); 
     return row; 
    } 

    static class RecordHolder { 
     TextView textView; 
     ImageView imageView; 
    } 
} 

MainActivity.class, перегружен onItemClick() :

gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
      } 
     }); 

Как вы можете видеть в файле ImageAdapter.class, я могу рисовать изображение по цвету, но я не могу изменить цвет назад, когда он выбран.

+0

Я отредактировал свой ответ, и я думаю, что это должно быть работа. лучше вы это проверите. –

+0

Прости, что я такой «злой», но, к сожалению, он не работает. Я имею в виду, что это точно, но когда я переписываю свой код, он работает, но неважно, какую строку я нажимаю, и всегда выбирает только первую строку. Я попытался получить позицию X и Y, а затем преобразовать их в строку позиции, но приложение удалено за исключением «исключения исключения java null». – Jake

+0

У меня есть обновленный ответ (снова) bro .. на этот раз, я думаю, что это должно работать как ожидалось. проверьте это. –

ответ

1

UPDATE ОТВЕТ (РАЗ):

Во-первых, вам нужно создать интерфейс: щелкните правой кнопкой мыши на вашем проекте пакета -> New -> Interface (. Напр назовем его OnMyGridTouchListener)
Во-вторых, добавьте публичный метод в наш интерфейс:

public interface OnMyGridTouchListener { 
    public void onMyGridTouch(ImageView imgView, int action); 
} 

В-третьих, используйте интерфейс внутри адаптера. Он хотел бы это:

private OnMyGridTouchListener myGridTouchListener; 
... 
public ImageAdapter(Context context, int layoutResourceId, ArrayList<Item> data) { 
    ... 
    myGridTouchListener = (OnMyGridTouchListener) context; 
    ... 
} 

... 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    holder.imageView.setImageBitmap(item.getImage()); 

    // here is our interface should be used 
    final ImageView finalImageView = holder.imageView; 
    row.setOnTouchListener(new OnTouchListener(){ 

     @Override 
     public boolean onTouch(View v, MotionEvent event){ 
      myGridTouchListener.onMyGridTouch(finalImageView, event.getAction()); 
      return true; 
     } 

    } 

    return row; 
} 

Затем перейдите к вашей деятельности и осуществлять в OnMyGridTouchListener, хотел бы это:

public class MyActivity extends Activity implements OnMyGridTouchListener { 
    ... 
    ... 

    @Override 
    public void onMyGridTouch(ImageView imgView, int action){ 

     if(action==MotionEvent.ACTION_DOWN){ 
      imgView.setColorFilter(Color.WHAT_COLOR_YOU_WANT); 
     } 
     else if(action==MotionEvent.ACTION_UP){ 
      imgView.setColorFilter(Color.WHAT_COLOR_YOU_WANT); 
     } 

    } 

Последняя его СДЕЛАНО!

+0

Да, это работает, спасибо вам большое. У меня есть один маленький вопрос о выпуске поля, опять же, изменить цвет на серый? Что-то в соответствии с методом метода onNothingSelected(), которого, к сожалению, нет в setOnItemClickListener() – Jake

+0

, можете ли вы показать мне здесь код? –

+0

Ничего не изменилось, добавлен только код, который вы мне дали (метод onItemClick точно такой же). Я не знаю, как я могу полностью вернуться, и отпустить кнопку, чтобы изменить цвет. – Jake

Смежные вопросы