gpt4 book ai didi

android - 获取画廊以从特定位置开始

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:04 25 4
gpt4 key购买 nike

我正在为我的应用程序创建一个图库部分,用于显示 X 数量的图像。这些图像是从外部服务器加载的。向用户显示包含图像缩略图的 GridView,单击这些缩略图后,将打开以全屏模式显示图像的 Gallery View 。ArrayList 用于保存包含这些图像链接的 String 对象。在我的 AdaptergetView 方法中,此 ArrayList 用于查看需要显示的图像。

到目前为止一切正常,但是当用户选择与 GridView 中的第一张图像不同的图像时,我遇到了问题。例如,当用户单击第 7 张图片时,Gallery 会显示第 7 张图片。但是,当用户向右滑动以查看之前的图像(第 6 张及之前的图像)时,什么也没有发生。当他向左滑动以查看即将到来的图像时,用户会看到列表中的第 2 项,然后是第 3 项,然后是第 4 项,依此类推。

很明显,Gallery 认为我首先提供给它的任何图像实际上都是列表中的第一项,并且开始显示之后的所有内容,如果图像实际上是第一个的话它应该有的.但是,Gallery 应该将图像显示为它在 GridView 上的实际位置。我怎样才能实现这样的目标?我试过在单击 GridView 时弄乱 position,但这只会导致我上面描述的行为。

这是我为此使用的代码:

PhotoFullView(画廊和画廊适配器)

package com.mobowski.appfrag.json.pictures;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

import com.mobowski.appfrag.R;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class PhotoFullView extends Activity {
/** Called when the activity is first created. */
CustomGallery gallery;
public ArrayList<String> links;
private int pos;

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.full_photo_gallery);

Bundle bun = getIntent().getExtras();
links = bun.getStringArrayList("links");
pos = bun.getInt("pos");

/*
* Find the gallery defined in the main.xml Apply a new (custom)
* ImageAdapter to it.
*/
gallery = (CustomGallery) findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this, links, pos));
gallery.setSpacing(25);

}

public class ImageAdapter extends BaseAdapter {
/** The parent context */
private Context myContext;
private ArrayList<String> links;
int pos;

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

/**
* All images to be displayed. Put some images to project-folder:
* '/res/drawable/uvw.xyz' .
*/

/** Simple Constructor saving the 'parent' context. */
public ImageAdapter(Context c, ArrayList<String> links, int pos) {
this.myContext = c;
this.links = links;
this.pos = pos;
}

/** Returns the amount of images we have defined. */
public int getCount() {
return this.links.size();
}

/* Use the array-Positions as unique IDs */
public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

/**
* Returns a new ImageView to be displayed, depending on the position
* passed.
*/
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(this.myContext);

String imageURL = links.get(position);
if (position == 0) {
imageURL = links.get(pos);
}
try {
URL aURL = new URL(imageURL);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
/* Buffered is always good for a performance plus. */
BufferedInputStream bis = new BufferedInputStream(is);
/* Decode url-data to a bitmap. */
Bitmap bm = BitmapFactory.decodeStream(bis);

bis.close();
is.close();
/* Apply the Bitmap to the ImageView that will be returned. */
i.setImageBitmap(bm);
} catch (Exception e) {
e.printStackTrace();
}

/* Image should be scaled as width/height are set. */
// i.setScaleType(ImageView.ScaleType.FIT_XY);
// /* Set the Width/Height of the ImageView. */
// i.setLayoutParams(new Gallery.LayoutParams());
return i;
}

}
}

自定义图库类(用于重载 onFling,因此它一次只显示 1 张图片)

package com.mobowski.appfrag.json.pictures;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Gallery;

public class CustomGallery extends Gallery{

public CustomGallery(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return super.onFling(e1, e2, 0, velocityY);
}

}

我刚刚设法找出在使用

选择自定义起始图像后进一步滚动时如何正确保持位置
String imageURL = links.get(pos+position);

其中 pos 是在 GridView 中单击的图像的位置。但是,这仍然没有让我有机会在点击图像之前滚动回图像。


好吧,这比我想象的要容易得多。再次阅读文档后,我发现我可以在我的 Gallery 对象上使用 setSelection(position) 从特定位置开始。如果所有的问题都这么容易解决就好了。感谢阅读!

最佳答案

好吧,这比我想象的要容易得多。再次阅读文档后,我发现我可以在我的 Gallery 对象上使用 setSelection(position) 从特定位置开始。如果所有的问题都这么容易解决就好了。感谢阅读!

关于android - 获取画廊以从特定位置开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com