2012-01-12 110 views
0

我有一個網格視圖,其中包含圖像時單擊一個圖像時,它應該打開另一個page.ie我需要將圖像從一個活動傳遞給另一個我想獲取圖像的像素。我有代碼來獲取像素。我需要的是我必須在其他活動中顯示圖像,以便獲取像素以從一項活動中傳遞所選圖像另一個android系統中。我已經嘗試了一些從堆棧溢出的解決方案,但它沒有工作將一個圖像從一個活動移動到android上的另一個活動選擇gridview

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

回答

2

* 當您單擊圖像時,獲取該圖像的paht/uri並創建意圖並將該意圖置於其他活動並顯示它。

例如:

gridview.setOnItemClickListener(新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

idont需要從SD卡中獲取圖像我已將alrady放置在可繪製文件夾上的圖像 – Ramz 2012-01-12 10:07:10

+0

private void showImage(){ String uri =「drawable/icon」; int imageResource = getResources()。getIdentifier(uri,null,getPackageName()); ImageView imageView =(ImageView)findViewById(R.id.myImageView); Drawable image = getResources()。getDrawable(imageResource); imageView.setImageDrawable(image); } – 2012-01-12 10:14:52

+0

將uri傳遞給下一個活動 – 2012-01-12 10:16:15

0

你可以得到圖像ID時,基於該選擇項,並通過ID來次活動並獲取圖像,或者你可以從一個到第二個使用static通過圖像變量與Bitmap因此,當它得到選擇只是顯示那些圖像很容易

0

您也可以傳遞圖像的uri作爲額外的意圖用於調用第二個活動。這樣,您將避免解碼數據,直到您真正需要它爲止。

0

Bitmap已經實現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); 
    } 
}); 

UPDATE:
更好地改變你的ImageAdapter.getItem()實現返回一個ImageView的或位圖,以ImageView的轉換爲位圖,簡單地做到這一點:

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

從檢索位圖NextActivity:

Parcelable details = getIntent().getExtras().getParcelable("details"); 
Bitmap bitmap = (Bitmap) details; 
相關問題