将一个图像从一个活动移动到android上的另一个活动选择gridview
问题描述:
我有一个网格视图,其中包含图像时单击一个图像时,它应该打开另一个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);
}
}
答
* 当您单击图像时,获取该图像的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);
答
你可以得到图像ID时,基于该选择项,并通过ID来次活动并获取图像,或者你可以从一个到第二个使用static
通过图像变量与Bitmap
因此,当它得到选择只是显示那些图像很容易
答
您也可以传递图像的uri作为额外的意图用于调用第二个活动。这样,您将避免解码数据,直到您真正需要它为止。
答
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;
idont需要从SD卡中获取图像我已将alrady放置在可绘制文件夹上的图像 – Ramz 2012-01-12 10:07:10
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
将uri传递给下一个活动 – 2012-01-12 10:16:15