@Override protected void initView() { new Thread(new Runnable() { @Override public void run() { //创建一个message //设置what字段的值为UPDATE_TEXT,主要是为了区分不同的message //设置message.obj的内容 //调用Handler的message对象 //handler中的handlermessage对象是在主线程中运行的 Message message = new Message(); message.what = UPDATE_TEXT; message.obj = compositeImages(); handler.sendMessage(message); } }).start(); }
private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: //在这里可以进行UI操作 //对msg.obj进行String强制转换 Bitmap a = (Bitmap) msg.obj; // 微信分享 bitmap=a; share_iv.setImageBitmap(a); break; } } }; private ShareAction shareAction = new ShareAction(ShareActivity.this) .setDisplayList(SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE) .setShareboardclickCallback(new ShareBoardlistener() { @Override public void (SnsPlatform snsPlatform, SHARE_MEDIA share_media) { UMImage image = new UMImage(ShareActivity.this, bitmap);//本地文件 String uid=LocalStorage.get("user_id").toString(); int l=uid.length(); if (l<7) { if (l==3){ uid="1111"+uid; }else if(l==4){ uid="111"+uid; }else if(l==5){ uid="11"+uid; }else if(l==6){ uid="1"+uid; } } String string="我是橙子交友的第"+uid+"个用户"; switch (share_media) { case WEIXIN: new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(shareListener) .withText(string) .withMedia(image) .setCallback(shareListener) .share(); break; case WEIXIN_CIRCLE: new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(shareListener) .withText(string) .withMedia(image) .setCallback(shareListener) .share(); break; } } }); private UMShareListener shareListener = new UMShareListener() { /** * @descrption 分享开始的回调 * @param platform 平台类型 */ @Override public void onStart(SHARE_MEDIA platform) { } /** * @descrption 分享成功的回调 * @param platform 平台类型 */ @Override public void onResult(SHARE_MEDIA platform) { MobclickAgent.onEvent(getApplicationContext(), "share"); //获取是否是今天抽奖 String upLoad_day=mStoreUtils.getUserUploadLuckDate(); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); Date now = new Date(); String nowDay = sf.format(now); mStoreUtils.setUserShareDate(nowDay); if (nowDay.equals(upLoad_day)){ int share_time= mStoreUtils.getUnreadMsgShare(); if (share_time<2){ int luck_time=mStoreUtils.getSumLuck(); mStoreUtils.setSumLuck(luck_time-2); mStoreUtils.setSumLuckShare(share_time+1); }else { } }else { mStoreUtils.setSumLuckShare(0); int luck_time=mStoreUtils.getSumLuck(); mStoreUtils.setSumLuck(luck_time-2); mStoreUtils.setUserUploadLuckDate(nowDay); } } /** * @descrption 分享失败的回调 * @param platform 平台类型 * @param t 错误原因 */ @Override public void onError(SHARE_MEDIA platform, Throwable t) { } /** * @descrption 分享取消的回调 * @param platform 平台类型 */ @Override public void onCancel(SHARE_MEDIA platform) { } };
/** * 图像的合成,可以通过在同一个Canvas中绘制两张图片。 * 只是在绘制第二章图片的时候,需要给Paint指定一个变幻模式TransferMode。 * 在Android中有一个XFermode所有的变幻模式都是这个类的子类 * 我们需要用到它的一个子类PorterDuffXfermode,关于这个类,其中用到PorterDuff类 * 这个类很简单,就包含一个Enum是Mode,其中定义了一组规则,这组规则就是如何将 * 一张图像和另一种图像进行合成 * 关于图像合成有四种模式,LIGHTEN,DRAKEN,MULTIPLY,SCREEN
*/
private Bitmap compositeImages(){ String ph= LocalStorage.get("avatar").toString(); System.out.println("ph:="+ph); Bitmap dstBitmap=getBitmapFromUri(ph); //获取这个图片的宽和高 int width = dstBitmap.getWidth(); int height = dstBitmap.getHeight(); //定义预转换成的图片的宽度和高度 DisplayMetrics dm = new DisplayMetrics(); //获取屏幕信息 getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; int newWidth = screenWidth/7; int newHeight = screenWidth/7; //计算缩放率,新尺寸除原始尺寸 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 创建操作图片用的matrix对象 Matrix matrix = new Matrix(); // 缩放图片动作 matrix.postScale(scaleWidth, scaleHeight); // 创建新的图片 Bitmap resizedBitmap = Bitmap.createBitmap(dstBitmap, 0, 0, width, height, matrix, true); // Bitmap dstBitmap=BitmapFactory.decodeResource(getResources(), R.mipmap.news_pressed); Bitmap srcBitmap= BitmapFactory.decodeResource(getResources(), R.mipmap.start_page1_share); Bitmap bmp = null; //下面这个Bitmap中创建的函数就可以创建一个空的Bitmap System.out.println("srcBitmap.getWidth():="+srcBitmap); bmp = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig()); Paint paint = new Paint(); Canvas canvas = new Canvas(bmp); //首先绘制第一张图片,很简单,就是和方法中getDstImage一样 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)); canvas.drawBitmap(resizedBitmap, 20, 10, paint); paint.setTextSize(getResources().getDimensionPixelSize(R.dimen.set_text_size)); String uid=LocalStorage.get("user_id").toString(); int l=uid.length(); if (l<7) { if (l==3){ uid="1111"+uid; }else if(l==4){ uid="111"+uid; }else if(l==5){ uid="11"+uid; }else if(l==6){ uid="1"+uid; } } String string="我是第"+uid+"个用户"; canvas.drawText( string,srcBitmap.getWidth()/3, screenWidth/13,paint ); canvas.drawBitmap(srcBitmap, 0, 0, paint); //在绘制第二张图片的时候,我们需要指定一个Xfermode //这里采用Multiply模式,这个模式是将两张图片的对应的点的像素相乘 //,再除以255,然后以新的像素来重新绘制显示合成后的图像 return bmp; } private Bitmap getBitmapFromUri(String uri) { Bitmap map = null; try { // 读取uri所在的图片 // Bitmap bitmap = MediaStore.Images.Media.getBitmap(SetActivity.this.getContentResolver(), uri); URL url = new URL(uri); URLConnection conn = url.openConnection(); conn.connect(); InputStream in; in = conn.getInputStream(); map = BitmapFactory.decodeStream(in); // TODO Auto-generated catch block return map; } catch (Exception e) { System.out.println("eeeeeeeeeee:="+e); e.printStackTrace(); return null; } }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦