【问题标题】:Android - Gallery of ImageViews with background images?Android - 带有背景图像的 ImageView 画廊?
【发布时间】:2012-01-29 06:44:23
【问题描述】:

我是 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;
    }
}

【问题讨论】:

  • 请不要在 Stack Overflow 上使用称呼或试图绕过它们的删除 (etiquette)。谢谢。
  • @Kev - 您如何在每条消息下方添加简短回复?我看到的只有“链接”、“编辑”和“标志”,以及底部添加另一个答案的按钮。我如何回复试图帮助我的人?至于我的问题,我仍然很难让它工作?
  • 在获得 50 代表之前,您可以评论自己的帖子,但不能评论其他人的帖子。您根本无法发表评论的原因是因为您不断创建新的未注册帐户,每个帐户都不同,我必须不断合并它们。我怀疑这是因为您一直在清除 cookie 或每次都从不同的机器上发布。我建议在 SO 上注册一个帐户以阻止这种情况发生。
  • 感谢您为我添加 cmets 功能所做的一切,Kev。

标签: android image background gallery imageview


【解决方案1】:

我认为你可以使用:

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

【讨论】:

    【解决方案2】:

    尝试使用这个..

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

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

    【讨论】:

    • Sujit,我尝试了您推荐的方法,但现在我看到较小的重叠图像并且没有背景图像(或者,背景图像位于具有完全相同尺寸的前景图像后面)。 philaphan.com/public/stackoverflow/gallery3.png
    【解决方案3】:

    我可以通过使用带有嵌套在其中的 LinearLayout 的 Horizo​​ntalScrollView 来解决这个问题。然后,我以编程方式添加两个 ImageView——一个用于背景,一个用于前景——并将前景定位在我选择的任何 X/Y 上。

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多