переместить одно изображение из одного занятия в другое занятие в Android при выборе вида сетки - PullRequest
0 голосов
/ 12 января 2012

У меня есть сетка, в которой содержатся изображения, при нажатии на одно изображение, которое должно открываться на другой странице. Т.е. мне нужно передать изображение из одного занятия в другое, где я хочу получить пиксели изображения. У меня естьКод для получения пикселей. Что мне нужно, так это то, что мне нужно показать изображение в пыльнике, чтобы получить пиксели. Как передать выбранное изображение из одного действия в другое в Android. Я пробовал некоторые решения из стека.переполнение, но оно не работает

// GridviewActivity.java

пакет gr.ed.vi;

          import android.app.Activity;
              import android.content.Context;
                import android.content.Intent;
           import android.os.Bundle;
           import android.view.View;
           import android.view.ViewGroup;
           import android.widget.AdapterView;
            import android.widget.BaseAdapter;
              import android.widget.GridView;
             import android.widget.ImageView;
                   import android.widget.Toast;
            import android.widget.AdapterView.OnItemClickListener;

      public class GridviewActivity extends Activity
    {    
    //---the images to display---
     Integer[] imageIDs = {
        R.drawable.ic_launcher,
        R.drawable.ic_launcher,
        R.drawable.ic_launcher,
        R.drawable.ic_launcher,
        R.drawable.ic_launcher,
        R.drawable.ic_launcher,
        R.drawable.ic_launcher                    
};

@Override    
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView parent, 
        View v, int position, long id) 
        {                
           /* Toast.makeText(getBaseContext(), 
                    "pic" + (position + 1) + " selected", 
                    Toast.LENGTH_SHORT).show();*/
            switch(position){
           case 0:

           break;
           case 1:
           //call second class
              Intent intent = new Intent(GridviewActivity.this, sm.class);

         //  intent.putExtra("photo",imageIDs);
           //  Log.d(TAG, "jpegCallback1" +data);
            startActivity(intent); 

             // intent.putExtra("img", imageIDs);
             //startActivity(intent);

           break;
           case 2:
           //call third class
               Intent k1=new Intent(GridviewActivity.this,sm.class);
               startActivity(k1);
           break;

           default:
           break;
               }
        }
    });        
   }

   public class ImageAdapter extends BaseAdapter 
    {
    private Context context;

    public ImageAdapter(Context c) 
    {
        context = c;
    }

    //---returns the number of images---
    public int getCount() {
        return imageIDs.length;
    }

    //---returns the ID of an item--- 
    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    //---returns an ImageView view---
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(context);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(5, 5, 5, 5);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageResource(imageIDs[position]);
        return imageView;
       }
   }    
  }

sm.java

package gr.ed.vi;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.AvoidXfermode.Mode;
import android.graphics.Bitmap.Config;
import android.graphics.BlurMaskFilter.Blur;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class sm extends Activity {
/** Called when the activity is first created. */
Bitmap overlay;      
Paint pTouch;
int X = -100;
int Y = -100;
Canvas c2;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle extras = getIntent().getExtras();
    byte[] photo = extras.getByteArray("photo");
    Bitmap mBitmap  = BitmapFactory.decodeByteArray (photo, 0, photo.length);
    Bitmap mBitmapover  = BitmapFactory.decodeByteArray (photo, 0, photo.length);

             getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,              
     WindowManager.LayoutParams.FLAG_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
   // Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),         
    R.drawable.android);
   // Bitmap mBitmapover = BitmapFactory.decodeResource(getResources(), R.drawable.ss);
    overlay =   
    BitmapFactory.decodeResource                 
   (getResources(),R.drawable.ss).copy(Config.ARGB_8888, true);  
    c2 = new Canvas(overlay);

    pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);         
  //  pTouch.setXfermode(new PorterDuffXfermode(Mode.TARGET); 
    pTouch.setColor(Color.TRANSPARENT);
    pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));
    setContentView(new BitMapView(this, mBitmap,mBitmapover));
}

class BitMapView extends View {
    Bitmap mBitmap = null;
    Bitmap mBitmapover = null;

    public BitMapView(Context context, Bitmap bm, Bitmap bmover) {
    super(context);
    mBitmap = bm;
    mBitmapover = bmover;
    }
     @Override
     public boolean onTouchEvent(MotionEvent ev) {

         switch (ev.getAction()) {

             case MotionEvent.ACTION_DOWN: {

                 X = (int) ev.getX();
                 Y = (int) ev.getY();
                 invalidate();

                 break;
             }

             case MotionEvent.ACTION_MOVE: {

                     X = (int) ev.getX();
                     Y = (int) ev.getY();
                     invalidate();
                     break;

             }           

             case MotionEvent.ACTION_UP:

                 break;

         }
         return true;
     }


    @Override
    protected void onDraw(Canvas canvas) {
    // called when view is drawn
    Paint paint = new Paint();
    paint.setFilterBitmap(true);
    // The image will be scaled so it will fill the width, and the
    // height will preserve the image’s aspect ration
/*  double aspectRatio = ((double) mBitmap.getWidth()) / mBitmap.getHeight();
    Rect dest = new Rect(0, 0, this.getWidth(),(int) (this.getHeight() / aspectRatio));
    double aspectRatio2 = ((double) mBitmapover.getWidth()) / mBitmapover.getHeight();
    Rect dest2 = new Rect(0, 0, this.getWidth(),(int) (this.getHeight() / aspectRatio2));
    canvas.drawBitmap(mBitmap, null, dest, paint);
    canvas.drawBitmap(mBitmapover, null, dest2, paint);                    */

    //draw background
    canvas.drawBitmap(mBitmap, 0, 0, null);
    //copy the default overlay into temporary overlay and punch a hole in it                          
    c2.drawBitmap(mBitmapover, 0, 0, null); //exclude this line to show all as you draw
    c2.drawCircle(X, Y, 80, pTouch);
    //draw the overlay over the background  
    canvas.drawBitmap(overlay, 0, 0, null);
    }
}

Ответы [ 4 ]

2 голосов
/ 12 января 2012

* когда вы нажимаете на изображение, получите paht / uri этого изображения и создадите намерение, поместите значение с намерением, получите его в другом упражнении и покажите его.

ex:

gridview.setOnItemClickListener (new OnItemClickListener () {

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
              int i=R.drawable.ic_launcher;

             Intent intent = new Intent(SamaaActivity.this,kl.class); 
            intent.putExtra("intVariableName", i);
            startActivity(intent);
    }
});

и получите это для других действий

Intent mIntent = getIntent();
    int intValue = mIntent.getIntExtra("intVariableName", 0);
0 голосов
/ 12 января 2012

Растровое изображение уже реализует Parcelable , просто поместите ваше растровое изображение в намерение и передайте его следующему действию.

gridview.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Bitmap image = imageAdapter.getItem(position);
    Intent intent = new Intent(getBaseContext(), NextActivity.class);
    intent.putExtra("details", image);
    startActivity(intent);
  }
});

ОБНОВЛЕНИЕ:
Лучше изменить реализацию ImageAdapter.getItem (), чтобы она возвращала ImageView или Bitmap, чтобы преобразовать imageView в Bitmap, просто сделайте это:

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();

Чтобы получить растровое изображение из NextActivity:

Parcelable details = getIntent().getExtras().getParcelable("details");
Bitmap bitmap = (Bitmap) details;
0 голосов
/ 12 января 2012

Вы также можете передать URI изображения в качестве дополнительного в намерении, используемом для вызова второго действия. Таким образом, вы будете избегать декодирования данных до тех пор, пока они вам действительно не понадобятся.

0 голосов
/ 12 января 2012

вы можете получить идентификатор изображения при выборе элемента и передать идентификатор во второе действие и получить изображение на основе этого, или вы можете передать изображение от одной до секунды, используя переменную static с Bitmap, поэтому, когда она будет выбрана, просто отобразите это изображениелегко

...