2017-01-24 6 views
0

Я хотел бы установить текст внутри изображения. На данный момент я получаю изображение из рисунка, хотя я думаю, что лучше использовать зритель? вот мой адаптер:Android - Установить текст внутри изображения с помощью gridview

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 


    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    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); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

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

    // references to our images 
    private Integer[] mThumbIds = { 
      R.drawable.ic_round, R.drawable.ic_round, 
      R.drawable.ic_round, R.drawable.ic_round, 
      R.drawable.ic_round, R.drawable.ic_round, 
      R.drawable.ic_round, R.drawable.ic_round, 

    }; 
} 

вот мой макет Я хочу использовать: item_single.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/single" 
    > 

    <ImageView 
     android:id="@+id/myImageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_round" /> 

    <TextView 
     android:id="@+id/myImageViewText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/myImageView" 
     android:layout_alignTop="@+id/myImageView" 
     android:layout_alignRight="@+id/myImageView" 
     android:layout_alignBottom="@+id/myImageView" 
     android:layout_margin="1dp" 
     android:gravity="center" 
     android:text="" 
     android:textColor="#000000" /> 

</RelativeLayout> 

Я видел этот вопрос How can I add a TextView into an ImageView in GridView Layout? но нет никакого четкого объяснения. В этом примере он использует ViewHolder, мой продолжал хотеть использовать RecycleViewHolder.

ответ

0

Вам нужно раздувать

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    TextView textView; 
    View view; 
    if (convertView == null) { 
     // if it's not recycled, initialize some attributes 
     view = LayoutInflater.from(mContext).inflate(R.layout. item_single,false); 
     imageView = view.findViewById(R.id.myImageView); 
     textView = view.findViewById(R.id.myImageViewText); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 
    } else { 
     view = convertView; 
     imageView = convertView.findViewById(R.id.myImageView); 
     textView = convertView.findViewById(R.id.myImageViewText); 
    } 

    imageView.setImageResource(mThumbIds[position]); 
    textView.setText("Any Text"); 
    return view; 
} 

Я бы порекомендовал вам использовать viewholders, но согласно вашему требованию, вы должны сделать это таким образом.

+0

'view = LayoutInflater.from (mContext) .inflate (R.layout.item_single, false);' не может разрешить метод inflate (int, boolean) –

+0

Хорошо, получилось, что это сработало. Что делать, если я хочу увеличивать текстовое представление на 1 на каждом изображении? –

+0

nvm, я получил его работу –

0

Надуйте свой пользовательский вид, в котором у вас есть ImageView и TextView оба. Внутри вашего getView метода Adapter класса, некоторые

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
    // This view will contain TextView and ImageView 
    convertView = inflater.inflate(R.layout.item_row, parent, false); 

Для получения дополнительной поиск пользовательских Adapter например.