我是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;
}
}
答案 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的HorizontalScrollView,我能够解决这个问题。然后我以编程方式添加两个ImageViews - 一个用于背景,一个用于前景 - 我将前景定位在我选择的任何X / Y.
如果有人在以后看到这个,我仍然有兴趣知道这是否可以在Gallery控件中完成。
答案 3 :(得分:0)
作为一般规则,如果要将背景图像添加到任何类型的充气库或ArrayAdapter或BaseAdapter,则 - 确保在父布局或父视图中定义背景图像,例如主视图布局,使用属性“ android:background =”@ drawable / backupimage “。 不要在XML中设置表示重复实例的自定义行/对象视图的背景。
这样,背景图像只会显示一次,在所有膨胀的对象后面显示为静态,而不会在每一行/对象上反复重复。