基于这个例子,我有无限的画廊:
http://blog.blundell-apps.com/infinite-scrolling-gallery/,
它运行得很好,现在我想让图库仍然滚动图像,每个图像下的应该有文字标题。
我搜索网没有结果,请你帮我编码,只是初学者在开发中。
=============================================== ===================================
新更新 :
上传照片解释我需要什么,我用普通图库得到它(应用文本到每个图像,并能够自定义文本,如下图所示,每个图像都有diffrenet文本比其他图像,但仍然没有成功用无限画廊做到这一点:
请任何帮助和建议。
非常感谢。
答案 0 :(得分:2)
我浏览了Blundell的教程,感谢他,我知道如何制作一个Infinitelyscrolling画廊:)
要回答这个问题,关于如何在每张图片下方添加文字标题,我对Blundell的漂亮啧啧进行了相同的小改动,并在上面的答案中使用了他的一些建议,我认为我有一个很好的方法来完成任务。
下面的代码根本不会膨胀或使用gallery_item.xml ,因此与每次充气时相比,它会显着提高性能。
修剪Blundell教程中的类代码(因为在这个问题中,你只使用资源而不是SD卡)。
public class InfiniteScrollingGalleryActivity extends Activity {
public class GalleryItem{
int imageId;
String caption;
public int getImageId() {
return imageId; }
public String getCaption() {
return caption;
}
public GalleryItem(int i,String s) {
imageId=i;
caption=s; }
}
int[] resourceImages = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GalleryItem[] item = new GalleryItem[6];
//initialising all items, change member variables according to needs
for(int i=0;i<6;i++){
item[i] = new GalleryItem(resourceImages[i], "pic no" +(i+1)); }
setContentView(R.layout.activity_main);
InfiniteGallery galleryOne = (InfiniteGallery) findViewById(R.id.galleryOne);
galleryOne.setResourceGallery(item);
} }
这里我添加了GalleryItem类数组并传递了它。
还在InfiniteGalley类中添加了以下代码。
public void setResourceGallery(GalleryItem[] item) {
setAdapter(new InfiniteGalleryResourceAdapter(getContext(), item));
setSelection((getCount() / 2));
}
在代码的getView()下面是好事情发生的地方:
public class InfiniteGalleryResourceAdapter extends BaseAdapter {
/** The context your gallery is running in (usually the activity) */
private Context mContext;
GalleryItem[] myItems;
public InfiniteGalleryResourceAdapter(Context context, GalleryItem[] item) {
this.mContext = context;
myItems=item;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// convertView is always null in android.widget.Gallery
TextView t = new TextView(mContext);
try {
int itemPos = (position % myItems.length);
t.setText(myItems[itemPos].getCaption());
Drawable d = mContext.getResources().getDrawable(myItems[itemPos].getImageId());
((BitmapDrawable) d).setAntiAlias(true); // Make sure we set anti-aliasing otherwise we get jaggies (non-smooth lines)
//d.setBounds(0,0,60,60); //use this to change dimens of drawable,if needed
t.setCompoundDrawablesWithIntrinsicBounds(null, d, null, null);
} catch (OutOfMemoryError e) {
// a 'just in case' scenario
Log.e("InfiniteGalleryResourceAdapter", "Out of memory creating imageview. Using empty view.", e);
}
return t;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
/** The width of each child image */
private static final int G_ITEM_WIDTH = 120;
/** The height of each child image */
private static final int G_ITEM_HEIGHT = 80;
private int imageWidth;
private int imageHeight;
}
在getView()
中,我只是创建一个textView并使用方便的t.setCompoundDrawablesWithIntrinsicBounds(null, d, null, null);
为其分配drawable。所以它排除需要膨胀布局,这是一项繁重的操作。
下面是输出图像:
答案 1 :(得分:0)
在适配器中你可以看到方法:getView,你可以看到这个方法返回一个ImageView,所以现在你想让getView方法返回一个imageview和textview ...
你可以通过几种方式实现这一点,在这里你可以用LayoutInflater
来做到这一点View v = getLayoutInflater().inflate(R.layout.gallery_item, null);
((ImageView) v.findViewById(R.id.img)).setImageResource(imageIds[position]);
((TextView) v.findViewById(R.id.caption)).setText(captions[position]);
所以在你的res / layout文件夹中你应该有一个'gallery_item'布局,其中包含一个ImageView(img)和一个TextView(标题)
即
gallery_item.xml
<LinearLayout>
<ImageView ... />
<TextView ... />
</LinearLayout>
希望这是有帮助的!
编辑
因此,上面的示例显示您需要两个数组,一个是imageIds,另一个是textCaptions。为了让您的适配器保持良好和清洁,它会尖叫让您制作一个物体。
public class GalleryItem {
int imageId;
String caption
// Constructor
// getters and setters
}
然后,您可以将GalleryItems
的数组或列表传递给适配器(替换setAdapter
方法)。即:
GalleryItem[] items = new GalleryItem[];
然后在上面列出的getView
方法中,您将提取每个对象:
GalleryItem item = items[position];
View v = getLayoutInflater().inflate(R.layout.gallery_item, null);
((ImageView) v.findViewById(R.id.img)).setImageResource(item.getImageId());
((TextView) v.findViewById(R.id.caption)).setText(item.getCaption());
希望明确