如何在GridView中通过ImageView设置图像视图

时间:2014-08-09 19:59:23

标签: android gridview imageview baseadapter

假设我想要在另一个上面设置多个图像,我怎样才能在GridView中执行此操作?

像:
背景
ImageView1
ImageView2位于ImageView2右下方

这是我想要的一个例子: http://i.stack.imgur.com/JS36H.png

这是我的代码
活性:

public class ImgAdapter extends BaseAdapter {
    private Context mContext;
    private ColorMatrixColorFilter cf;
    String Questions = Question.Questions;
    int level = Levels.level;

    public ImgAdapter(Context c) {
        mContext = c;
        ColorMatrix matrix = new ColorMatrix();
        //matrix.setSaturation(0); //0 means grayscale
        matrix.setSaturation(0);
        cf = new ColorMatrixColorFilter(matrix);
    }

    public int getCount() {

        return ThumbIds.length;

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        SharedPreferences pref = mContext.getSharedPreferences(Questions, Context.MODE_PRIVATE);


        //imageView = (ImageView) convertView;
        imageView = new ImageView(mContext);
        int size = mContext.getResources().getDimensionPixelSize(R.dimen.width);
        imageView.setLayoutParams(new GridView.LayoutParams(size, size));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setAdjustViewBounds(true);
        imageView.setImageResource(ThumbIds[position]);



        if(pref.getBoolean(level+"answered"+position, false)){

            //Thats the ImageView I want to set over the another ImageView
            /*ImageView answ;
            answ = new ImageView(mContext);
            answ.setScaleType(ImageView.ScaleType.CENTER_CROP);
            answ.setAdjustViewBounds(true);
            answ.setImageResource(R.drawable.answered);*/

            imageView.setImageResource(ThumbIds[position]+1);
        }

        return imageView;

    }


    public static Integer[] ThumbIds =
        {
        R.drawable.1,
        R.drawable.2,
        R.drawable.3,
        R.drawable.4,
        R.drawable.5,
        R.drawable.6,
        R.drawable.7
        };  

}

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical"
              android:id="@+id/layout" >

    <TextView
        android:id="@+id/Correct"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        />

<GridView 
android:id="@+id/Question"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:horizontalSpacing="20dp"
android:verticalSpacing="20dp"
android:numColumns="3"
android:stretchMode="columnWidth"
tools:context=".Question" />

</LinearLayout>

在问题活动中,我得到了GridView

1 个答案:

答案 0 :(得分:0)

不幸的是,当细胞试图相互重叠时,GridViews不喜欢它。因此,假设您在gridview中有一个48x48dp的单元格。试图渲染大于48的任何东西都会导致它被剪裁。所以这意味着你需要做一个眼睛分类的技巧。

假设您想要以48x48dp显示主图像。让我们称第二个人是一个16x16dp的徽章,你想让它居中在主图像的右下角。然后你需要一个大约56dp的细胞。如果您在混音中加入填充或边距,则可能需要进行调整。对GridView中每个项目的布局做类似于以下的操作应该可以解决问题。

<FrameLayout
    android:layout_width="56dp"
    android:layout_height="56dp"
    ....any other attributes>

    <ImageView
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_gravity="left|top"
        android:src="Your main image"
        ...any other attributes/>

    <ImageView
        android:layout_width="16dp"
        android:layout_height="16dp"
        android:layout_gravity="right|bottom"
        android:src="Your main image"
        ...any other attributes/>

</FrameLayout>