Java Android使用GridView和OnScrollListener加载10幅图像
我正在构建一个gridview,其中包含大量的图像,大概有1000多张。为了减少gridview的加载时间,我想加载10个图像 tnx GalleryActivity.javaJava Android使用GridView和OnScrollListener加载10幅图像,java,android,gridview,Java,Android,Gridview,我正在构建一个gridview,其中包含大量的图像,大概有1000多张。为了减少gridview的加载时间,我想加载10个图像 tnx GalleryActivity.java public class GalleryActivity extends AppCompatActivity { private GridView gridView; private GridViewAdapter gridAdapter; ArrayList<String>
public class GalleryActivity extends AppCompatActivity {
private GridView gridView;
private GridViewAdapter gridAdapter;
ArrayList<String> f = new ArrayList<String>();// list of file paths
File[] listFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
gridView = (GridView) findViewById(R.id.gridView);
gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
gridView.setAdapter(gridAdapter);
//gridView.setOnScrollChangeListener(new EndlessScrollListener());
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ImageItem item = (ImageItem) parent.getItemAtPosition(position);
//Create intent
Intent intent = new Intent(GalleryActivity.this, DetailsActivity.class);
intent.putExtra("title", R.string.text_by + item.getTitle());
intent.putExtra("subtitle", R.string.text_by + item.getSubtitle());
intent.putExtra("image", item.getAddress());
//Start details activity
startActivity(intent);
}
});
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(GalleryActivity.this, "333 " + position,
Toast.LENGTH_SHORT).show();
return false;
}
});
}
private ArrayList<ImageItem> getData() {
final ArrayList<ImageItem> imageItems = new ArrayList<>();
getFromSdcard();
for (int i = 0; i < f.size(); i++) {
Bitmap bitmap = createThumbnailFromBitmap(f.get(i), 200, 200);
Bitmap bitmapIcon = createThumbnailFromBitmap(f.get(i), 50, 50);
imageItems.add(new ImageItem(bitmap,bitmapIcon,f.get(i),f.get(i),f.get(i)));
}
return imageItems;
}
public void getFromSdcard()
{
File file= new File(Environment.getExternalStorageDirectory(),"DCIM/Camera");
if (file.isDirectory())
{
listFile = file.listFiles();
for (int i = 0; i < listFile.length ; i++)
{
f.add(listFile[i].getAbsolutePath());
}
}
}
private Bitmap createThumbnailFromBitmap(Bitmap source, int width, int height){
//OPTIONS_RECYCLE_INPUT- Constant used to indicate we should recycle the input
return ThumbnailUtils.extractThumbnail(source, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
}
private Bitmap createThumbnailFromBitmap(String filePath, int width, int height){
return ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filePath), width, height);
}
}
java
public class GridViewAdapter extends ArrayAdapter<ImageItem> {
private Context context;
private int layoutResourceId;
private ArrayList<ImageItem> data = new ArrayList<ImageItem>();
public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.text_date_card_mochgir);
holder.subtitle = (TextView) row.findViewById(R.id.secondary_by_card_mochgir);
holder.image = (ImageView) row.findViewById(R.id.image_card_mochgir);
holder.icon = (ImageView) row.findViewById(R.id.icon_app_mochgir);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ImageItem item = data.get(position);
holder.imageTitle.setText(getContext().getResources().getString(R.string.text_date) + item.getTitle());
holder.subtitle.setText(getContext().getResources().getString(R.string.text_by) + item.getSubtitle());
holder.image.setImageBitmap(item.getImage());
holder.icon.setImageBitmap(item.getIcon());
return row;
}
static class ViewHolder {
TextView imageTitle;
TextView subtitle;
ImageView image;
ImageView icon;
}
}
公共类GridViewAdapter扩展了ArrayAdapter{
私人语境;
私人内部布局资源;
private ArrayList data=new ArrayList();
公共GridViewAdapter(上下文上下文、int-layoutResourceId、ArrayList数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
视窗座;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的ViewHolder();
holder.imageTitle=(TextView)row.findViewById(R.id.text\u date\u card\u mochgir);
holder.subtitle=(TextView)row.findViewById(R.id.secondary\u by\u card\u mochgir);
holder.image=(ImageView)row.findViewById(R.id.image\u card\u mochgir);
holder.icon=(ImageView)row.findViewById(R.id.icon\u app\u mochgir);
row.setTag(支架);
}否则{
holder=(ViewHolder)row.getTag();
}
ImageItem=data.get(位置);
holder.imageTitle.setText(getContext().getResources().getString(R.string.text_date)+item.getTitle());
holder.subtitle.setText(getContext().getResources().getString(R.string.text_by)+item.getSubtitle());
holder.image.setImageBitmap(item.getImage());
holder.icon.setImageBitmap(item.getIcon());
返回行;
}
静态类视窗夹{
文本视图图像标题;
文本视图字幕;
图像视图图像;
图像视图图标;
}
}
我建议您改用RecyclerView,您不必担心加载时间,因为RecyclerView会销毁不在视图中的项目,只加载视图中的项目,使其快速高效 要设置RecycerView,请签出此帖子:
希望这有帮助,我只能看到代码。你的问题是什么?欢迎来到StackOverflow。请访问上的“帮助”页面,并修改您的问题,以包含一个最小的可验证完整示例,并提供一些解释。
public class GridViewAdapter extends ArrayAdapter<ImageItem> {
private Context context;
private int layoutResourceId;
private ArrayList<ImageItem> data = new ArrayList<ImageItem>();
public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.text_date_card_mochgir);
holder.subtitle = (TextView) row.findViewById(R.id.secondary_by_card_mochgir);
holder.image = (ImageView) row.findViewById(R.id.image_card_mochgir);
holder.icon = (ImageView) row.findViewById(R.id.icon_app_mochgir);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ImageItem item = data.get(position);
holder.imageTitle.setText(getContext().getResources().getString(R.string.text_date) + item.getTitle());
holder.subtitle.setText(getContext().getResources().getString(R.string.text_by) + item.getSubtitle());
holder.image.setImageBitmap(item.getImage());
holder.icon.setImageBitmap(item.getIcon());
return row;
}
static class ViewHolder {
TextView imageTitle;
TextView subtitle;
ImageView image;
ImageView icon;
}
}
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="200dp"
android:numColumns="auto_fit"
android:verticalSpacing="4dp"
android:horizontalSpacing="4dp"
android:paddingBottom="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingTop="4dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:focusable="true"
android:clickable="true"
android:contextClickable="true"
android:drawSelectorOnTop="true"
android:longClickable="true"/>