Android - 带有背景图像的ImageViews画廊?

时间:2011-06-10 04:58:32

标签: android image background gallery imageview

我是Android开发的新手,但熟悉视图,控件,对象,XML布局,C#等概念。

我正在尝试使用尽可能多的本机功能创建图像的水平滚动“列表”。 (我并不反对使用自定义组件,但我想在一起黑客攻击之前尽可能多地学习和优化。)

我目前有一个带有适配器的图库。适配器正在创建ImageViews,如许多基本教程中所示。在适配器的每次传递中,我正在为ImageView设置背景图像。我希望能够将前景图像放置在特定X / Y位置的背景图像上。不幸的是,我还没有超越让背景图像按照我喜欢的方式运行。

使用简单的Gallery和ImageView,这是否可行?或者,我是否需要构建某种自定义控件(可能使用嵌套布局?)并在适配器的每次迭代中使用该控件?

非常感谢任何帮助。


这就是我所看到的......

http://philaphan.com/public/stackoverflow/gallery1.png

......以及我想看到的......

http://philaphan.com/public/stackoverflow/gallery2.png

这是我的代码:

public class MyAdapter extends BaseAdapter
{

    private Context mContext;

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

    public int getCount()
    {
        return App.myList.size();   
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent)
    {
        String imagePath = App.myList.get(position).thumbnail;

        ImageView i = new ImageView(mContext);

        i.setLayoutParams(new Gallery.LayoutParams(150, 150));
        i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        i.setBackgroundResource(R.drawable.image_bk5);
        //i.setBackgroundColor(Color.BLACK);

        File f = new File(imagePath);

        if (!f.exists())
        {
            i.setImageResource(R.drawable.image_missing);
        }
        else
        {
            Bitmap bmp = BitmapFactory.decodeFile(imagePath);
            i.setImageBitmap(bmp);
        }

        return i;
    }
}

4 个答案:

答案 0 :(得分:1)

我认为你可以使用:

i.setPadding(50, 50, 50, 50); //setpadding(left,top,right,bottom)

答案 1 :(得分:0)

尝试使用它..

替换i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); with i.setScaleType(ImageView.ScaleType.FIT_XY);

或检查您的背景图片。我认为你的背景图像宽度造成了问题。

答案 2 :(得分:0)

通过使用嵌套在其中的LinearLayout的Horizo​​ntalScrollView,我能够解决这个问题。然后我以编程方式添加两个ImageViews - 一个用于背景,一个用于前景 - 我将前景定位在我选择的任何X / Y.

如果有人在以后看到这个,我仍然有兴趣知道这是否可以在Gallery控件中完成。

答案 3 :(得分:0)

作为一般规则,如果要将背景图像添加到任何类型的充气库或ArrayAdapter或BaseAdapter,则 - 确保在父布局或父视图中定义背景图像,例如主视图布局,使用属性“ android:background =”@ drawable / backupimage “。 不要在XML中设置表示重复实例的自定义行/对象视图的背景。

这样,背景图像只会显示一次,在所有膨胀的对象后面显示为静态,而不会在每一行/对象上反复重复。