java - Android ImageSwitcher 图像到另一个 Activity

标签 java android android-activity imageswitcher

我正在做 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/

相关文章:

android - 如何从服务内部检测/监听 Android 应用程序/Activity 的运行变化?

android - 长按删除项目

android - 从字符串列表填充 Android 中的 Spinner

android - 如何返回到android中的父 Activity ?

java - 有没有办法去掉重音符号并将整个字符串转换为常规字母?

Android ScrollView 完成了吗?

Android TabHost - 每个选项卡中的 Activity

java - HtmlUnit SubmitbuttonClick 不起作用,它在我的 apache tomcat 中起作用,而不是在客户端中起作用

java - NetBeans 的启动画面功能如何工作?

java - 复制构造函数