请问.setImageBitmap()为什么在高API中无法显示
来源:5-2 作业题
underwater
2019-02-17 12:35:39
在自定义Adapter的getView()中为ImageView设置Bitmap在高版本的安卓系统中无效,在4.0.3版本中能正常工作。
.setImageResource()却能完全正常工作。
// 两个图片资源都是在/res/drawable下new的vector asset // 代码 package com.example.videoiohomework; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.io.File; public class FileExplorerActivity extends AppCompatActivity { private ListView fileListLv; private File[] fileList; private Bitmap folderBitmap; private Bitmap fileBitmap; private FileExplorerAdapter fileExplorerAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_file_explorer); fileListLv = findViewById(R.id.file_list_lv); folderBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.folder); fileBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.file); initEvent(); } private void initEvent() { fileList = new File(Environment.getExternalStorageDirectory().getAbsolutePath()).listFiles(); fileExplorerAdapter = new FileExplorerAdapter(this, fileList, folderBitmap, fileBitmap); fileListLv.setAdapter(fileExplorerAdapter); fileListLv.setOnItemClickListener(new OnFileExplorerItemClickListener()); } private void updateDirectoryFileList(File file) { fileList = file.listFiles(); fileExplorerAdapter.fileList = this.fileList; fileExplorerAdapter.notifyDataSetChanged(); } private class FileExplorerAdapter extends BaseAdapter { private Context context; File[] fileList; private Bitmap folderBitmap; private Bitmap fileBitmap; FileExplorerAdapter(Context context, File[] fileList, Bitmap folderBitmap, Bitmap fileBitmap) { this.context = context; this.fileList = fileList; this.folderBitmap = folderBitmap; this.fileBitmap = fileBitmap; } @Override public int getCount() { return fileList.length; } @Override public Object getItem(int position) { return fileList[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.file_item, parent, false); viewHolder = new ViewHolder(); viewHolder.imageView = convertView.findViewById(R.id.file_item_iv); viewHolder.textView = convertView.findViewById(R.id.file_item_tv); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (fileList[position].isDirectory()) { viewHolder.imageView.setImageBitmap(folderBitmap); // Android 4.0.3模拟器正常显示 | 7.0.0/7.1.0以及真机8.0无任何显示 viewHolder.imageView.setImageResource(R.drawable.folder); // 显示正常 } else { viewHolder.imageView.setImageBitmap(fileBitmap); // 同上 viewHolder.imageView.setImageResource(R.drawable.file); // 同上 } viewHolder.textView.setText(fileList[position].getName()); viewHolder.file = fileList[position]; return convertView; } } class ViewHolder { ImageView imageView; TextView textView; File file; } private class OnFileExplorerItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { File file = ((ViewHolder) view.getTag()).file; if (file.isDirectory()) { updateDirectoryFileList(file); } else { if (file.getName().contains("mp4")) { // TODO } else { Toast.makeText(FileExplorerActivity.this, "不支持该文件的格式", Toast.LENGTH_SHORT).show(); } } } } }
2回答
嗯,是的当图片太大太长时,用setImageBitmap()时部分机型无效,无法显示。可能你还需要适当缩小图片来解决。祝:学习愉快
underwater
提问者
2019-02-17
相似问题