Android中Intent跳转的那些事儿
2016-10-08 15:24
274 查看
在android中,运用Intent跳转页面时,常用的是利用Bundle携带数据跳转到另外一个activity,其实携带图片跳转的原理也和携带数据跳转一样,首先将图片转化成bitmap,再将bitmap转化成byte数组,也就是说,根本的原理是与数据传送一样。下面是本人写的一个简单的demo,可以给大家参考参考。 在数据发送到第二个activity的时候我们还可以对图片做裁剪处理,我在下面也为大家剪贴了出来。
加载一张网络图片,并处理成byte数组,代码如下:
public class MainActivity extends AppCompatActivity { private ImageView image; private String path = "http://192.168.1.120/18363677172/userphoto/18363677172.png"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //严苛模式,在主线程中请求网络,不建议使用,建议新开子线程访问网络 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects().detectLeakedClosableObjects() .penaltyLog().penaltyDeath().build()); image = (ImageView) findViewById(R.id.imageview); // new Thread() { // @Override // public void run() { try { image.setImageBitmap(getBitmap(path)); image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "我要跳了啊", Toast.LENGTH_SHORT).show(); byte buff[] = new byte[0];//看你图有多大..自己看着改 try { buff = Bitmap2Bytes(getBitmap(path));//这里的LZbitmap是Bitmap类的,跟第一个方法不同 } catch (IOException e) { e.printStackTrace(); } Intent myIntent = new Intent(MainActivity.this,Open.class); myIntent.putExtra("bitmap",buff); startActivity(myIntent); finish(); } }); } catch (Exception e) { e.printStackTrace(); } // } // }.start(); } public static Bitmap getBitmap(String path) throws IOException { bca0 URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if (conn.getResponseCode() == 200) { InputStream inputStream = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } return null; } private byte[] Bitmap2Bytes(Bitmap bm){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); return baos.toByteArray(); } }
接收上一个activity发送的图片byte数组,并加载图片并裁剪:
public class Open extends Activity { private ImageView imageView; private TextView textView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.open); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects().detectLeakedClosableObjects() .penaltyLog().penaltyDeath().build()); imageView= (ImageView) findViewById(R.id.image); textView= (TextView) findViewById(R.id.tv); Intent myIntent = getIntent(); byte buff[] = (byte[]) myIntent.getSerializableExtra("bitmap"); Bitmap bitmap = BitmapFactory.decodeByteArray(buff, 0, buff.length); // 生成位图 imageView.setImageBitmap(toRoundCorner(bitmap,2)); // 显示位图 // Bitmap bmp= BitmapFactory.decodeByteArray(buff, 0, buff.length);//重新编码出Bitmap对象 //// Drawable drawable =new BitmapDrawable(bmp); // imageView.setImageBitmap(bmp); Toast.makeText(Open.this, "byte"+buff, Toast.LENGTH_SHORT).show(); } public static Bitmap toRoundCorner(Bitmap bitmap, float ratio) { System.out.println("图片是否变成圆形模式了+++++++++++++"); Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); canvas.drawRoundRect(rectF, bitmap.getWidth() / ratio, bitmap.getHeight() / ratio, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); System.out.println("pixels+++++++" + String.valueOf(ratio)); return output; } }
最后,别忘了添加网络访问权限哦!
相关文章推荐
- android Intent实现Activity之间跳转并传值
- Android Activity跳转 Intent
- Android 使用Intent实现Activity跳转和数据传递
- android 通过Intent action 跳转到系统页面,调用系统功能以及action动作
- android开发_Intent_requestCode_resultCode页面之间的跳转
- android Intent 跳转重新实例化对象了
- android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统
- android 通过Intent action 跳转到系统页面,调用系统功能以及action动作
- Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】
- Android---Textview加入Intent、表情,点击跳转Activity
- Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
- android 通过Intent action 跳转到系统页面,调用系统功能以及action动...
- 用intent实现Android中Activity之间的跳转
- android中多个activity用Intent跳转时,跳转后的activity显示白屏问题
- Android使用ListView构造复杂界面,响应点击事件,通过Intent跳转activity
- android开发基础:Intent与Bundle的使用,实现页面跳转及信息传递
- Android Intent传值且实现窗体跳转
- android应用程序跳转到系统的各个设置页面和通过Intent action 跳转到系统页面,
- Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
- Android Intent用法一 实现activity之间跳转 并 传参