gpt4 book ai didi

java - Android ImageSwitcher 图像到另一个 Activity

转载 作者:行者123 更新时间:2023-12-01 10:09:48 25 4
gpt4 key购买 nike

我正在做 ImageSwitcher,它工作完美,尝试将 ImageSwitcher 图像发送到另一个 Activity 。 ImageSwitcher 工作完美,但单击按钮转到下一个 Activity 后,错误:Views.java 中的 (imageview) 中出现空指针异常

MainEvent.java

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;

import java.io.ByteArrayOutputStream;

public class MainEvent extends Activity {

private ImageSwitcher imageSwitcher;
Button btnNext,back,select,refresh;
ImageView imageView;

// Array of Image IDs to Show In ImageSwitcher
int imageIds[]={R.drawable.frame3,R.drawable.frame7,
R.drawable.curtain,R.drawable.potraitimage
};
int messageCount=imageIds.length;
// to keep current Index of ImageID array
int currentIndex=0;
Animation in,out;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main_event);

// get The references
btnNext=(Button)findViewById(R.id.button2);
back=(Button)findViewById(R.id.button);
select=(Button)findViewById(R.id.select);
refresh=(Button)findViewById(R.id.refresh);
imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);

// Set the ViewFactory of the ImageSwitcher that will create
ImageView object when asked
imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
public View makeView() {
// TODO Auto-generated method stub
// Create a new ImageView set it's properties
imageView = new ImageView(getApplicationContext());
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setImageResource(R.drawable.potraitimage);
return imageView;
}
});

// Declare the animations and initialize them
in = AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left);
out = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);

// set the animation type to imageSwitcher
imageSwitcher.setInAnimation(in);
imageSwitcher.setOutAnimation(out);

// ClickListener for NEXT button
// When clicked on Button ImageSwitcher will switch between Images
// The current Image will go OUT and next Image will come
in with specified animation
btnNext.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub
imageView.setImageResource(0);
Log.d("index", String.valueOf(currentIndex));
currentIndex++;
Log.d("index", String.valueOf(currentIndex));
// If index reaches maximum reset it
if(currentIndex==messageCount)
currentIndex=0;
imageSwitcher.setImageResource(imageIds[currentIndex]);
}
});
back.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// set the animation type to imageSwitcher

// TODO Auto-generated method stub
Log.d("index", String.valueOf(currentIndex));
currentIndex--;
Log.d("index", String.valueOf(currentIndex));
// If index reaches maximum reset it
if (currentIndex < 0)
currentIndex = 2;
imageSwitcher.setImageResource(imageIds[currentIndex]);
}
});
select.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.setImageResource(imageIds[currentIndex]);
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
Intent in=new Intent(MainEvent.this,Camera.class);
/* in.putExtra("image",bitmap);*/
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Bundle bu=new Bundle();
bu.putByteArray("ImageByte",byteArray );
in.putExtras(bu);
startActivity(in);
}
});
refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onRestart();
}
});
}
@Override
protected void onRestart() {

// TODO Auto-generated method stub
super.onRestart();
Intent i = new Intent(MainEvent.this, MainEvent.class); //your class
startActivity(i);
finish();
}
}

View .java

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

public class Views extends AppCompatActivity {
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
image = (ImageView) findViewById(R.id.image);
Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("ImageByte");
/* Intent i=getIntent();*/
/* Bitmap bitmap=i.getExtras().getParcelable("image");
image.setImageBitmap(bitmap);*/

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
image.setImageBitmap(bmp);//here null pointer exception

}
}

我不知道如何将图像从图像切换器传递到下一个 Activity 。请帮助我。

最佳答案

不能只传递图像所在的索引(int),而不是传递图像的字节吗?

这样会更有效率。

(来自下面链的扩展答案)在两个 Activity 中共享数组。静态属性的简单方法:

public class StaticModelManager {
public static int imageIds[];
}

然后在应用程序中的任何位置获取或设置它:

StaticModelManager.imageIds = {
R.drawable.frame3,
R.drawable.frame7,
R.drawable.curtain,
R.drawable.potraitimage
};

使用它们:

StaticModelManager.imageIds[currentIndex];

多个 Activity 或 fragment 可以轻松访问这一实例。只要确保在不需要或位于内存中的东西时清理它们即可。

关于java - Android ImageSwitcher 图像到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36199702/

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