我想从imageview中的资源文件夹中打开图像。我在列表视图中有图像的名称。每当用户按下任何列表项时,它应该显示另一个布局文件,其中将有图像显示在imageview.different列表项中使用不同的图像。如果可能请提供一些伪代码。我有这个列表视图。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CopyReadAssets();
AssetManager asset = getAssets();
try {
final String[] arrdata = asset.list("IMAGEfolder");
List<String> imagelist = new ArrayList<String>();
int size = arrdata.length;
for(int i = 0;i<size;i++)
{
if(arrdata[i].contains(".png"))
{
imagelist.add(arrdata[i]);
}
}
ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,imagelist);
ListView listView = (ListView) findViewById(R.id.listView1);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(position == 0 ) {
Intent intent = new Intent(Advertise.this,Advertise_image.class);
intent.putExtra("name", imagelist.get(position).toString());
startActivity(intent);
}
这是我的Adertise_image.java文件
public class Advertise_image extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.advertise_image);
InputStream ip =null;
try {
ip=getAssets().open("ImageFolder/"+getIntent().getStringExtra("name"));
Bitmap bitmap=BitmapFactory.decodeStream(ip);
ImageView iv = (ImageView) findViewById(R.id.advertiseimage);
iv.setImageBitmap(bitmap);
}catch(Exception e) {
e.printStackTrace();
}finally {
if(ip!=null)
try {
ip.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
这是我的布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/advertiseimage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
我的堆栈跟踪如下
04-16 16:29:52.112: W/System.err(1106): java.io.FileNotFoundException: icon.png
04-16 16:29:52.122: W/System.err(1106): at android.content.res.AssetManager.openAsset(Native Method)
04-16 16:29:52.122: W/System.err(1106): at android.content.res.AssetManager.open(AssetManager.java:315)
04-16 16:29:52.122: W/System.err(1106): at android.content.res.AssetManager.open(AssetManager.java:289)
04-16 16:29:52.122: W/System.err(1106): at com.example.allahummalabbaik.Advertise_image.onCreate(Advertise_image.java:20)
04-16 16:29:52.132: W/System.err(1106): at android.app.Activity.performCreate(Activity.java:4465)
04-16 16:29:52.132: W/System.err(1106): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-16 16:29:52.132: W/System.err(1106): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
04-16 16:29:52.132: W/System.err(1106): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-16 16:29:52.132: W/System.err(1106): at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-16 16:29:52.132: W/System.err(1106): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-16 16:29:52.142: W/System.err(1106): at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 16:29:52.142: W/System.err(1106): at android.os.Looper.loop(Looper.java:137)
04-16 16:29:52.152: W/System.err(1106): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-16 16:29:52.152: W/System.err(1106): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 16:29:52.152: W/System.err(1106): at java.lang.reflect.Method.invoke(Method.java:511)
04-16 16:29:52.152: W/System.err(1106): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
终于解决了我的问题..谢谢你们所有人的帮助....
答案 0 :(得分:1)
我没有完全理解下一个布局文件的含义,但我认为这是另一项活动。所以你走了:
在你的onitemclick中,将字符串传递给另一个活动:
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(MainActivity.this , YourImageViewActivity.class);
intent.putExtra("image" , imagelist.get(position).toString());
startActivity(intent);
}
在您的imageview活动中,调用此方法将图像设置为imageview:
InputStream yourBitmap=null;
try {
yourBitmap = getAssets().open(getIntent().getStringExtra("image"));
Bitmap bitmap=BitmapFactory.decodeStream(yourBitmap);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(yourBitmap!=null)
yourBitmap.close();
}
如果您的意思是相同的布局,只需将点击字符串设置为全局字符串,然后使用我提供的第二个代码将其设置为您的imageview。
答案 1 :(得分:0)
尝试以下代码: -
private Bitmap getBitmapFromAsset(String strName)
{
AssetManager assetManager = getAssets();
InputStream istr = null;
try {
istr = assetManager.open(strName);
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
http://www.javacodegeeks.com/2012/02/android-read-file-from-assets.html
答案 2 :(得分:0)
希望此代码可以帮助您
InputStream bitmap=null;
try {
bitmap=getAssets().open("icon.png");
Bitmap bit=BitmapFactory.decodeStream(bitmap);
img.setImageBitmap(bit);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bitmap!=null)
bitmap.close();
}