哈士奇WWW
2018-09-06 17:13:55浏览 1763
@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;
}
}
原文链接:http://www.apkbus.com/blog-851511-72752.html