簡體   English   中英

如何在充滿ImageView的GridView中添加TextView

[英]How to add TextView inside a GridView filled with ImageView

我有一個GridView,可在其中直接使用ImageView添加圖像(我不為圖像使用XML)。 現在,我想使用TextView在每個單元格的底部添加圖像名稱。 我該怎么做? 提前致謝。

自定義適配器類:

public class GridViewImageAdapter extends BaseAdapter {

    private Activity _activity;
    private ArrayList<String> _filePaths = new ArrayList<String>();
    private int imageWidth;
    private GridView imageCarrete;

    public GridViewImageAdapter(Activity activity, ArrayList<String> filePaths,
                            int imageWidth, GridView imageCarrete) {
        this._activity = activity;
        this._filePaths = filePaths;
        this.imageWidth = imageWidth;
        this.imageCarrete = imageCarrete;
    }

    @Override
    public int getCount() {
        return this._filePaths.size();
    }

    @Override
    public Object getItem(int position) {
        return this._filePaths.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(_activity);
        } else {
            imageView = (ImageView) convertView;
        }

        // get screen dimensions
        Bitmap image = decodeFile(_filePaths.get(position), imageWidth,
            imageWidth);

        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(imageWidth,
            imageWidth));
        imageView.setImageBitmap(image);

        // Listener del GridView
        imageCarrete.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                Intent i = new Intent(_activity, FullScreenViewActivity.class);
                i.putExtra("position", position);
                _activity.startActivityForResult(i, 1234);
            }
        });

        return imageView;
    }

    /*
     * Resizing image size
     */
    public static Bitmap decodeFile(String filePath, int WIDTH, int HIGHT) {
        try {

            File f = new File(filePath);

            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            final int REQUIRED_WIDTH = WIDTH;
            final int REQUIRED_HIGHT = HIGHT;
            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_WIDTH
                    && o.outHeight / scale / 2 >= REQUIRED_HIGHT)
                scale *= 2;

            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void remove(String path){
        _filePaths.remove(path);
    }

}

GridView XML

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:gravity="center"
    android:stretchMode="columnWidth"
    android:background="#000000">
</GridView>

在您的getView()方法中,將ImageView替換為具有drawable的TextView

TextView tv = new TextView(context);
 tv.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

您將在頂部提供drawable,在其余部分提供0 ,即:

tv.setCompoundDrawablesWithIntrinsicBounds(0, yourDrawable, 0, 0);

只要在getView()方法中創建Imagview創建LinearLayout ...用addView()方法向其中添加ImageViewTextView ...。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
      LinearLayout _ll;
      if (convertView == null) {            
        _ll = new LinearLayout(mContext);
        _ll.setOrientation(LinearLayout.VERTICAL);

        ImageView img  = new ImageView(mContext);
        img.setLayoutParams(new LinearLayout.LayoutParams(100, 100));   // your image size
        img.setBackgroundResource(images[position]);                    // here pass your array list position
        _ll.addView(img);

        TextView text = new TextView(mContext);
        text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        text.setText("dsaf");
        text.setGravity(Gravity.CENTER);
        _ll.addView(text);            
      } else {
          _ll = (LinearLayout) convertView;
      }
  return _ll;
}

如果要將文本覆蓋在圖像上,也可以使用RelativeLayout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM