我有一个由4个图像组成的图像滑块。我想在这些图像上放置不同的文本视图?
问题描述:
下面是我使用Viewpager的Image Slider的XML代码。正如你可以在下面看到的,我已经有一个textview已经出现在所有4张图片上。我有一个由4个图像组成的图像滑块。我想在这些图像上放置不同的文本视图?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image_view"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:scaleType="centerCrop"
/>
<TextView
android:id="@+id/myImageViewText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/image_view"
android:layout_alignTop="@+id/image_view"
android:layout_alignRight="@+id/image_view"
android:layout_alignBottom="@+id/image_view"
android:layout_margin="1dp"
android:gravity="bottom"
android:textSize="30dp"
android:text="Welcome to DriftFan"
android:textStyle="bold"
android:textAllCaps="true"
android:textColor="@color/colorPrimary"/>
</RelativeLayout>
这是我ViewPager XML代码
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="fill_parent"
android:layout_height="204dp"
android:scaleType="centerCrop"
></android.support.v4.view.ViewPager>
最后这里是我的类
public class myTimerTask extends TimerTask {
@Override
public void run() {
if (getActivity()== null) {
return;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (viewPager.getCurrentItem() == 0) {
viewPager.setCurrentItem(1);
} else if (viewPager.getCurrentItem() == 1) {
viewPager.setCurrentItem(2);
} else if (viewPager.getCurrentItem() == 2) {
viewPager.setCurrentItem(3);
}
}
});
}
}
}
是否有我的Java类中的一些代码,我可以手动分配文本查看任何图像?
public class ViewPagerAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
private Integer[] images = {R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4};
public ViewPagerAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.custom_layout, null);
ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
imageView.setImageResource(images[position]);
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ViewPager vp = (ViewPager)container;
View view = (View) object;
vp.removeView(view);
}
}
上面是ViewPager适配器类,这是我的ImageSlidler的基础。
答
public class ViewPagerAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
private Integer[] images = {R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4};
private String[] texts= {"text1", "text2","text3","text4"};
public ViewPagerAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.custom_layout, null);
ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
TextView tv= (TextView) view.findViewById(R.id.myImageViewText);
imageView.setImageResource(images[position]);
tv.setText(texts[position]);
ViewPager vp = (ViewPager) container;
vp.addView(view, 0);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ViewPager vp = (ViewPager)container;
View view = (View) object;
vp.removeView(view);
}
}
答
您拥有带ImageView和TextView的布局文件。对于ViewPager的每个项目,您使用图像数组中的图像。对TextView执行相同的操作 - 创建文本数组并在适配器中找到您的TextView并设置正确的文本。 Bosco Sabin的示例演示了您需要做什么。
我在这里有一个错误,tv.setText [texts [position]]; –
tv.setText(texts [position]); - 得到它的工作。谢谢@Bosco Sabin –