我实现了一个自定义ListView,这是每一行的结构:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imagenEvento"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="centerCrop"
android:adjustViewBounds="false"
android:paddingBottom="2dp"
android:contentDescription="@string/contenidoImagen"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:padding="10dp"
android:orientation="vertical" >
<TextView
android:id="@+id/titulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="17sp"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/sitio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/fecha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
我已经设置了我的ListView和适配器,它在访问数据时工作正常,但是当我尝试将ImageView转换为byteArray以便我可以将其发送到另一个Activitie时,我无法获取ImageView
lv = (ListView) findViewById(R.id.lista);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
//creo el nuevo objeto para poder llamarlo
Intent intent = new Intent(AllProductsActivity.this, PostActivity.class);
//Creo la informacion para pasar entre actividades
Bundle informacion= new Bundle();
informacion.putInt("id", eventos.get(position).getID());
Bitmap bmp = BitmapFactory.decodeResource(a.getResources(), R.id.imagenEvento);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
informacion.putByteArray("imagen", byteArray);
}
});
我得到了我的bmp NULL:
Bitmap bmp = BitmapFactory.decodeResource(a.getResources(), R.id.imagenEvento);
我想我应该在ListView中指出该项目的位置,但我不知道该怎么做
[编辑] 问题解决了,我在下一个Activity中获取图像,但是,我总是从此活动的ListView获得顶部图像,如何获得点击的图像?
答案 0 :(得分:1)
而不是:
Bitmap bmp = BitmapFactory.decodeResource(a.getResources(), R.id.imagenEvento);
获取位图图像。试试这个:
ImageView image = (ImageView)v.findViewByID(R.id.iamgeenEvento);
Bitmap bmp = ((BitmapDrawable)image.getDrawable()).getBitmap();
您的原始代码试图将imageview本身解码为位图,因为它不是位图会返回空值。
答案 1 :(得分:0)
您使用的ImageView
只是一个引用,因此无需将其转换为数组只需将引用直接传递为static
或者创建一个包含此类引用的static class
以便您可以稍后使用它,但您也可以将imageview
的图像保存为位图并编码将该图像保存为字节数组并在需要时对其进行解码,然后将其用作imageView.setImageBitmap(bitmap);
imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();
public String BitmapToString(Bitmap bitmap){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);
byte[] b = baos.toByteArray();
String image = Base64.encodeToString(b, Base64.DEFAULT);
return image;
}
public Bitmap StringToBitmap(String image){
byte[] encodeByte = Base64.decode(image, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte, 0 , encodeByte.length);
return bitmap;
}