Android ImageSwitcher 图片到另一个 activity

Android ImageSwitcher image to another activity

我正在做 ImageSwitcher,它工作完美尝试将 ImageSwitcher Image 发送到另一个 activity..ImageSwitcher 工作完美但是点击按钮进入下一个 activity 后,错误:空指针异常在(图像视图)中 Views.java

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();
}
}

Views.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

}
}

我不知道如何将图像从 imageswitcher 传递到下一个 activity.. 请大家帮帮我..

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

这样会更有效率。

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

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

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

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

使用它们:

StaticModelManager.imageIds[currentIndex];

多个活动或片段可以轻松访问这个实例。只需确保在不需要时或它位于内存中时进行清理即可。