文字定制的无限滚动图库 [英] text customization for Infinite Scrolling Gallery
问题描述
我已经根据这个例子无限空间:
http://blog.blundell-apps.com/infinite-scrolling-gallery / ,每一件事情的运行确定:
正是我想要的将文本应用到每个图片和可以自定义文字太如图所示下来的图像,和比其他的每个形象diffrenet文字,但仍然没有成功与无限画廊做
我试着用以下code,但它给我的强制关闭运行应用程序时,
(也许有错codeS我写的,但我还在学习Android开发JAVA和BEGINER)。
请任何帮助和建议将成为pciated AP $ P $
非常感谢。
我的code:
GALLERY_ITEM
<?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:ID =@ + ID / LinearLayout01
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:方向=垂直
机器人:重力=CENTER_HORIZONTAL>
< ImageView的
机器人:ID =@ + ID /图像
机器人:layout_height =300dp
机器人:layout_width =FILL_PARENT/>
<的TextView
机器人:文字=TextView的
机器人:ID =@ + ID / textView1
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:文字颜色=#B22222
机器人:TEXTSIZE =20dp
机器人:比重=中心
机器人:layout_margin =30dp
机器人:layout_below =@ + ID /图片/>
然后在InfiniteScrollingGalleryActivity.java改变如下:
公共类InfiniteScrollingGalleryActivity延伸活动{ / **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
//设置布局时使用
的setContentView(R.layout.main); InfiniteGallery galleryOne =(InfiniteGallery)findViewById(R.id.galleryOne);
galleryOne.setAdapter(新InfiniteGalleryAdapter(本));
}}
然后,更改InfiniteGalleryResourceAdapter.java如下:
公共类InfiniteGalleryAdapter延伸BaseAdapter { / **每个子图像的宽度* /
私有静态最终诠释G_ITEM_WIDTH = 360;
/ **每个孩子图像的高度* /
私有静态最终诠释G_ITEM_HEIGHT = 240;
/ **您的画廊中(通常是活动)运行过程中* /
私人语境mContext;
私人诠释imageWidth;
私人诠释imageHeight;
私人诠释[] imageIds; 公共InfiniteGalleryAdapter(上下文C中,int [] imageIds){
this.mContext = C;
this.imageIds = imageIds; } 公众诠释的getCount(){
返回Integer.MAX_VALUE的; }
公共对象的getItem(INT位置){
返回的位置; }
众长getItemId(INT位置){
返回的位置; } 私人活动活动;
私人LayoutInflater吹气= NULL; 公共InfiniteGalleryAdapter(活动){
最终诠释[] imageIds;
活性=一个;
吹气=(LayoutInflater)activity.getSystemService
Context.LAYOUT_INFLATER_SERVICE); }
公共类ViewHolder {
公众的TextView文本;
公众形象ImageView的; }
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ImageView的I = getImageView();
尝试{ INT itemPos =(位置%imageIds.length); i.setImageResource(imageIds [itemPos]); ((BitmapDrawable)i.getDrawable())setAntiAlias(真)。 } 赶上(OutOfMemoryError异常五){ Log.e(InfiniteGalleryResourceAdapter,内存不足创建ImageView的。
使用空视图,E);} 查看VI = convertView; ViewHolder持有人; 如果(convertView == NULL){
VI = inflater.inflate(R.layout.gallery_items,NULL);
持有人=新ViewHolder();
holder.text =(TextView中)vi.findViewById(R.id.textView1);
holder.image =(ImageView的)vi.findViewById(R.id.image);
vi.setTag(保持器); }
其他
支架=(ViewHolder)vi.getTag();
holder.text.setText(名称[位置]); 最终诠释stub_id =图像[位置]
holder.image.setImageResource(stub_id);
返回VI; } 私人诠释[] =图像{
R.drawable.one_1,R.drawable.one_4,
R.drawable.one_2,R.drawable.one_5,
R.drawable.one_3}; 私有String [] NAME = {
这是我的车,我喜欢这个,
请hekp我,IM公园
这是很好的地方参观。};
私人ImageView的getImageView(){
setImageDimensions();
ImageView的I =新ImageView的(mContext);
i.setLayoutParams(新Gallery.LayoutParams(imageWidth,imageHeight));
i.setScaleType(ScaleType.CENTER_INSIDE);返回我; } 私人无效setImageDimensions(){
如果(imageWidth == 0 || imageHeight == 0){
imageWidth = AndroidUtils.convertToPix(mContext,G_ITEM_WIDTH);
imageHeight = AndroidUtils.convertToPix(mContext,G_ITEM_HEIGHT);
}}
}
这是logcat的错误:
二月4日至10日:25:13.057:E / AndroidRuntime(12302):致命异常:主要
二月四日至10日:25:13.057:E / AndroidRuntime(12302):显示java.lang.NullPointerException
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在com.infinite.test.AndroidUtils.convertToPix(AndroidUtils.java:11)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在com.infinite.test.InfiniteGalleryAdapter.setImageDimensions
(InfiniteGalleryAdapter.java:131)
二月4日至10日:25:13.057:E / AndroidRuntime(12302):
在com.infinite.test.InfiniteGalleryAdapter.getImageView
(InfiniteGalleryAdapter.java:117)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在com.infinite.test.InfiniteGalleryAdapter.getView(InfiniteGalleryAdapter.java:66)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.View.measure(View.java:8366)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.View.measure(View.java:8366)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.ViewGroup.measureChildWithMargins(viewGroup.java:3138)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.View.measure(View.java:8366)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.View.measure(View.java:8366)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.View.measure(View.java:8366)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.ViewRoot.performTraversals(ViewRoot.java:844)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.os.Handler.dispatchMessage(Handler.java:99)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.os.Looper.loop(Looper.java:123)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在android.app.ActivityThread.main(ActivityThread.java:3687)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在java.lang.reflect.Method.invokeNative(本机方法)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在java.lang.reflect.Method.invoke(Method.java:507)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:842)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
二月四日至10日:25:13.057:E / AndroidRuntime(12302):
在dalvik.system.NativeStart.main(本机方法)
二月四日至10日:25:13.061:E /(129):Dumpstate> /数据/日志/ dumpstate_app_error
这个问题似乎出在上下文变量和图像的位置。请尝试以下code为您的适配器:
公共类InfiniteGalleryAdapter延伸BaseAdapter {
/ **每个子图像的宽度* /
私有静态最终诠释G_ITEM_WIDTH = 360;
/ **每个孩子图像的高度* /
私有静态最终诠释G_ITEM_HEIGHT = 240;
/ **您的画廊中(通常是活动)运行过程中* /
私人语境mContext;
私人诠释imageWidth;
私人诠释imageHeight;
私人诠释[] imageIds;
公共InfiniteGalleryAdapter(上下文C中,int [] imageIds){
this.mContext = C;
this.imageIds = imageIds; }
公众诠释的getCount(){
返回Integer.MAX_VALUE的;
}
公共对象的getItem(INT位置){
返回的位置; }
众长getItemId(INT位置){
返回的位置; }
//私人活动活动;
私人LayoutInflater吹气= NULL;
公共InfiniteGalleryAdapter(背景信息){
最终诠释[] imageIds;
//活性=一个;
this.mContext =一;
吹气=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}公共类ViewHolder {
公众的TextView文本;
公众形象ImageView的;
}私人诠释[] =图像{
R.drawable.one_1,R.drawable.one_4,
R.drawable.one_2,R.drawable.one_5,
R.drawable.one_3
};
私有String [] NAME = {
这是我的车,我喜欢这个,
请hekp我,IM公园
这是很好的地方参观。
};
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ImageView的I = getImageView();
INT itemPos =(位置%images.length);
尝试{ i.setImageResource(图像[itemPos]);
((BitmapDrawable)i.getDrawable())setAntiAlias(真)。 }
赶上(OutOfMemoryError异常五){
Log.e(InfiniteGalleryResourceAdapter,内存不足创建的ImageView使用空视图。E);
}查看VI = convertView;
ViewHolder持有人;
如果(convertView == NULL){
VI = inflater.inflate(R.layout.gallery_items,NULL);
持有人=新ViewHolder();
holder.text =(TextView中)vi.findViewById(R.id.textView1);
holder.image =(ImageView的)vi.findViewById(R.id.image);
vi.setTag(保持器);
}其他
支架=(ViewHolder)vi.getTag();
holder.text.setText(名称[itemPos]);
最终诠释stub_id =图像[itemPos]
holder.image.setImageResource(stub_id);
返回VI;
}私人ImageView的getImageView(){
setImageDimensions(); ImageView的I =新ImageView的(mContext);
i.setLayoutParams(新Gallery.LayoutParams(imageWidth,imageHeight));
i.setScaleType(ScaleType.CENTER_INSIDE);
返回我; }
私人无效setImageDimensions(){
如果(imageWidth == 0 || imageHeight == 0){
imageWidth = AndroidUtils.convertToPix(mContext,G_ITEM_WIDTH);
imageHeight = AndroidUtils.convertToPix(mContext,G_ITEM_HEIGHT);
}}}
I have infinite gallery based on this example :
http://blog.blundell-apps.com/infinite-scrolling-gallery/, every thing run ok :
exactly i want to applied text to each image and able to customize text too as shown down image ,and each image has diffrenet text than others , but still not succeed to do it with infinite gallery
I tried with following code but it gave me FORCE CLOSE when running the app ,
( MAYBE THERE IS WRONG CODES I WROTE , BUT IM STILL LEARNING JAVA AND BEGINER IN ANDROID DEVELOPMENT) .
please any help and advice will be appreciated
THANKS ALOT.
MY CODE :
GALLERY_ITEM
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<ImageView
android:id="@+id/image"
android:layout_height="300dp"
android:layout_width="fill_parent" />
<TextView
android:text="TextView"
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#B22222"
android:textSize="20dp"
android:gravity="center"
android:layout_margin="30dp"
android:layout_below="@+id/image" />
Then change in InfiniteScrollingGalleryActivity.java as follow :
public class InfiniteScrollingGalleryActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the layout to use
setContentView(R.layout.main);
InfiniteGallery galleryOne = (InfiniteGallery) findViewById(R.id.galleryOne);
galleryOne.setAdapter(new InfiniteGalleryAdapter(this));
} }
Then change the InfiniteGalleryResourceAdapter.java as follow :
public class InfiniteGalleryAdapter extends BaseAdapter {
/** The width of each child image */
private static final int G_ITEM_WIDTH = 360;
/** The height of each child image */
private static final int G_ITEM_HEIGHT = 240;
/** The context your gallery is running in (usually the activity) */
private Context mContext;
private int imageWidth;
private int imageHeight;
private int[] imageIds;
public InfiniteGalleryAdapter(Context c, int[] imageIds) {
this.mContext = c;
this.imageIds = imageIds; }
public int getCount() {
return Integer.MAX_VALUE; }
public Object getItem(int position) {
return position; }
public long getItemId(int position) {
return position; }
private Activity activity;
private LayoutInflater inflater=null;
public InfiniteGalleryAdapter(Activity a) {
final int[] imageIds;
activity = a;
inflater = (LayoutInflater)activity.getSystemService
Context.LAYOUT_INFLATER_SERVICE); }
public class ViewHolder{
public TextView text;
public ImageView image; }
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = getImageView();
try {
int itemPos = (position % imageIds.length);
i.setImageResource(imageIds[itemPos]);
((BitmapDrawable) i.getDrawable()).setAntiAlias(true); }
catch (OutOfMemoryError e) {
Log.e("InfiniteGalleryResourceAdapter", "Out of memory creating imageview.
Using empty view.", e); }
View vi=convertView;
ViewHolder holder;
if(convertView==null){
vi = inflater.inflate(R.layout.gallery_items, null);
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.textView1);
holder.image=(ImageView)vi.findViewById(R.id.image);
vi.setTag(holder); }
else
holder=(ViewHolder)vi.getTag();
holder.text.setText(name[position]);
final int stub_id=images[position];
holder.image.setImageResource(stub_id);
return vi; }
private int[] images = {
R.drawable.one_1, R.drawable.one_4,
R.drawable.one_2, R.drawable.one_5,
R.drawable.one_3 };
private String[] name = {
"this is my car", "i love this",
"please hekp me", "im in park",
" This is nice place to visit.", };
private ImageView getImageView() {
setImageDimensions();
ImageView i = new ImageView(mContext);
i.setLayoutParams(new Gallery.LayoutParams(imageWidth, imageHeight));
i.setScaleType(ScaleType.CENTER_INSIDE); return i; }
private void setImageDimensions() {
if (imageWidth == 0 || imageHeight == 0) {
imageWidth = AndroidUtils.convertToPix(mContext, G_ITEM_WIDTH);
imageHeight = AndroidUtils.convertToPix(mContext,G_ITEM_HEIGHT);
} }
}
This is logcat error :
04-10 02:25:13.057: E/AndroidRuntime(12302): FATAL EXCEPTION: main
04-10 02:25:13.057: E/AndroidRuntime(12302): java.lang.NullPointerException
04-10 02:25:13.057: E/AndroidRuntime(12302):
at com.infinite.test.AndroidUtils.convertToPix(AndroidUtils.java:11)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at com.infinite.test.InfiniteGalleryAdapter.setImageDimensions
(InfiniteGalleryAdapter.java:131)
4-10 02:25:13.057: E/AndroidRuntime(12302):
at com.infinite.test.InfiniteGalleryAdapter.getImageView
(InfiniteGalleryAdapter.java:117)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at com.infinite.test.InfiniteGalleryAdapter.getView(InfiniteGalleryAdapter.java:66)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.View.measure( View.java:8366)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.View.measure(View.java:8366)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.ViewGroup.measureChildWithMargins(viewGroup.java:3138)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.View.measure(View.java:8366)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.View.measure(View.java:8366)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.View.measure(View.java:8366)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.ViewRoot.performTraversals(ViewRoot.java:844)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.os.Handler.dispatchMessage(Handler.java:99)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.os.Looper.loop(Looper.java:123)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at android.app.ActivityThread.main(ActivityThread.java:3687)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at java.lang.reflect.Method.invokeNative(Native Method)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at java.lang.reflect.Method.invoke (Method.java:507)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
04-10 02:25:13.057: E/AndroidRuntime(12302):
at dalvik.system.NativeStart.main(Native Method)
04-10 02:25:13.061: E/(129): Dumpstate > /data/log/dumpstate_app_error
The problem seems to lie with the context variable and position of images. try the following code for your adapter:
public class InfiniteGalleryAdapter extends BaseAdapter {
/** The width of each child image */
private static final int G_ITEM_WIDTH = 360;
/** The height of each child image */
private static final int G_ITEM_HEIGHT = 240;
/** The context your gallery is running in (usually the activity) */
private Context mContext;
private int imageWidth;
private int imageHeight;
private int[] imageIds;
public InfiniteGalleryAdapter(Context c, int[] imageIds) {
this.mContext = c;
this.imageIds = imageIds; }
public int getCount() {
return Integer.MAX_VALUE;
}
public Object getItem(int position) {
return position; }
public long getItemId(int position) {
return position; }
//private Activity activity;
private LayoutInflater inflater=null;
public InfiniteGalleryAdapter(Context a) {
final int[] imageIds;
//activity = a;
this.mContext = a;
inflater = (LayoutInflater)mContext.getSystemService ( Context.LAYOUT_INFLATER_SERVICE);
} public class ViewHolder{
public TextView text;
public ImageView image;
}
private int[] images = {
R.drawable.one_1, R.drawable.one_4,
R.drawable.one_2, R.drawable.one_5,
R.drawable.one_3
};
private String[] name = {
"this is my car", "i love this",
"please hekp me", "im in park",
" This is nice place to visit.",
};
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = getImageView();
int itemPos = (position % images.length);
try {
i.setImageResource(images[itemPos]);
((BitmapDrawable) i.getDrawable()).setAntiAlias(true); }
catch (OutOfMemoryError e) {
Log.e("InfiniteGalleryResourceAdapter", "Out of memory creating imageview. Using empty view.", e);
} View vi=convertView;
ViewHolder holder;
if(convertView==null){
vi = inflater.inflate(R.layout.gallery_items, null);
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.textView1);
holder.image=(ImageView)vi.findViewById(R.id.image);
vi.setTag(holder);
} else
holder=(ViewHolder)vi.getTag();
holder.text.setText(name[itemPos]);
final int stub_id=images[itemPos];
holder.image.setImageResource(stub_id);
return vi;
}
private ImageView getImageView() {
setImageDimensions();
ImageView i = new ImageView(mContext);
i.setLayoutParams(new Gallery.LayoutParams(imageWidth, imageHeight));
i.setScaleType(ScaleType.CENTER_INSIDE);
return i; }
private void setImageDimensions() {
if (imageWidth == 0 || imageHeight == 0) {
imageWidth = AndroidUtils.convertToPix(mContext, G_ITEM_WIDTH);
imageHeight = AndroidUtils.convertToPix(mContext,G_ITEM_HEIGHT);
} } }
这篇关于文字定制的无限滚动图库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!