效果图

一键转发按钮,直接把多张图片拉起朋友圈,自动填充图片,或者多张图片发给好友,文字可以复制过去直接粘贴,

实现思路:

1.先把接口请求下来的多张图片保存到本地,这里是用Glide做的本地缓存

//缓存图片到本地
for (int i = 0; i < images.size(); i++) {Glide.with(this).load(images.get(i).getPic_url()).asBitmap().into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {ImgFileUtils.saveBitmap(PosterXQActivity.this, resource, StringUtils.setDateTime());}});
}
/**工具类代码  * author:zhengfeng on 2017/8/21 10:13  */
public class ImgFileUtils {
/**  * 生成文件夹路径  */public static String SDPATH = Environment.getExternalStorageDirectory() + "/WS_IMG/"; public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存图片 File appDir = new File(Environment.getExternalStorageDirectory(), "/WS_IMG/"); if (!appDir.exists()) { appDir.mkdir();  } String fileName = System.currentTimeMillis() + ".jpg";File file = new File(appDir, fileName); try {FileOutputStream fos = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush(); fos.close();} catch (FileNotFoundException e) { e.printStackTrace();} catch (IOException e) {e.printStackTrace();} // 其次把文件插入到系统图库 try { MediaStore.Images.Media.insertImage(context.getContentResolver(),  file.getAbsolutePath(), fileName, null);} catch (FileNotFoundException e) { e.printStackTrace(); } // 最后通知图库更新  //context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));} /**  * 将图片压缩保存到文件夹  * * @param bm * @param picName */ public static void saveBitmap(Context context,Bitmap bm, String picName) {try {// 如果没有文件夹就创建一个程序文件夹 if (!isFileExist("")) { File tempf = createSDDir("");} File f = new File(SDPATH, picName + ".JPEG");Log.e("filepath",f.getAbsolutePath()); PosterXQImgCache.getInstance().setImgCache(f.getAbsolutePath());//缓存保存后的图片路径 // 如果该文件夹中有同名的文件,就先删除掉原文件 if (f.exists()) { f.delete();} FileOutputStream out = new FileOutputStream(f);bm.compress(Bitmap.CompressFormat.JPEG, 90, out); out.flush(); out.close(); Log.e("imgfile", "已经保存"); //保存图片后发送广播通知更新数据库 Uri uri = Uri.fromFile(f); context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} } /**  * 质量压缩 并返回Bitmap  ** @param image  * 要压缩的图片 * @return 压缩后的图片 */  private Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  int options = 100;while (baos.toByteArray().length / 1024 > 100) {// 循环判断如果压缩后图片是否大于100kb,大于继续压缩  baos.reset();// 重置baos即清空baos image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中 options -= 10;// 每次都减少10 } ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片  return bitmap; } /**  * 质量压缩  *  * @param bitmap  * @param picName */  public static void compressImageByQuality(final Bitmap bitmap,  String picName) { // 如果没有文件夹就创建一个程序文件夹 if (!isFileExist("")) { try { File tempf = createSDDir("");} catch (IOException e) {// TODO Auto-generated catch block  e.printStackTrace();} }File f = new File(SDPATH, picName + ".JPEG"); // 如果该文件夹中有同名的文件,就先删除掉原文件if (f.exists()) { f.delete();} ByteArrayOutputStream baos = new ByteArrayOutputStream();int options = 100;// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos); // 循环判断如果压缩后图片是否大于200kb,大于继续压缩 while (baos.toByteArray().length / 1024 > 500) { // 重置baos即让下一次的写入覆盖之前的内容  baos.reset(); // 图片质量每次减少5  options -= 5;  // 如果图片质量小于10,则将图片的质量压缩到最小值 if (options < 0) options = 0;  // 将压缩后的图片保存到baos中  bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos); // 如果图片的质量已降到最低则,不再进行压缩  if (options == 0) break;}// 将压缩后的图片保存的本地上指定路径中  FileOutputStream fos; try { fos = new FileOutputStream(new File(SDPATH, picName + ".JPEG")); fos.write(baos.toByteArray());  fos.flush(); fos.close(); } catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) { e.printStackTrace();}} /**  * 创建文件夹  ** @param dirName  * 文件夹名称  * @return 文件夹路径  * @throws IOException  */  public static File createSDDir(String dirName) throws IOException {File dir = new File(SDPATH + dirName);if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) {System.out.println("createSDDir:" + dir.getAbsolutePath()); System.out.println("createSDDir:" + dir.mkdir()); } return dir; } /** * 判断改文件是否是一个标准文件  ** @param fileName  * 判断的文件路径  * @return 判断结果  */  public static boolean isFileExist(String fileName) {File file = new File(SDPATH + fileName); file.isFile(); return file.exists(); } /** * 删除指定文件  ** @param fileName  */  public static void delFile(String fileName) { File file = new File(SDPATH + fileName); if (file.isFile()) { file.delete(); } file.exists(); } /**  * 删除指定文件  * @param file */  public static void deleteFile(File file) { if (file.exists()) { // 判断文件是否存在 if (file.isFile()) { // 判断是否是文件  file.delete(); // delete()方法 你应该知道 是删除的意思;} else if (file.isDirectory()) {// 否则如果它是一个目录 File files[] = file.listFiles();// 声明目录下所有的文件 files[]; for (int i = 0; i < files.length; i++) {// 遍历目录下所有的文件  deleteFile(files[i]); // 把每个文件 用这个方法进行迭代 } } file.delete(); } else { Log.i("TAG", "文件不存在!");} } /**  * 删除指定文件夹中的所有文件  */  public static void deleteDir() { File dir = new File(SDPATH);  if (dir == null || !dir.exists() || !dir.isDirectory()) return;  for (File file : dir.listFiles()) {if (file.isFile()) file.delete(); else if (file.isDirectory()) deleteDir(); } dir.delete();  } /**  * 判断是否存在该文件  ** @param path  * 文件路径  * @return  */  public static boolean fileIsExists(String path) { try { File f = new File(path);if (!f.exists()) { return false; } } catch (Exception e) { return false; } return true; } }

2.缓存图片的同时把图片路径做一个缓存,为了拉起朋友圈直接带过去多张图片路径

public class PosterXQImgCache {private List<String> imgCache = new ArrayList<>();//用于存放保存后的图片路径private static final PosterXQImgCache instance = new PosterXQImgCache();public static PosterXQImgCache getInstance() {return instance;}public List<String> getImgCache() {return imgCache;}public void setImgCache(String path) {//传入保存后的图片绝对路径imgCache.add(path);}public void removeImgCache() {//清空缓存imgCache.clear();}
}

3,一键转发点击事件,直接拿到缓存后的图片路径集合,以Uri数组的形式传入多张图片文件

case R.id.one_tranmit://一键转发imgCache = PosterXQImgCache.getInstance().getImgCache();Uri[] uris = new Uri[imgCache.size()];//创建用于存放图片的Uri数组//循环缓存路径分别生成文件,添加到图片Uri数组中for (int i = 0; i < imgCache.size(); i++) {uris[i] = Uri.fromFile(new File(imgCache.get(i)));}requestCopy(text);//复制文字内容到粘贴板//调用转发微信功能类shareUtils = new ShareUtils(this, text);shareUtils.setUri(uris);break;
 
/**分享多图到微信或者朋友圈*/import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.Toast;import com.example.common_lib.R;
import com.ss.sszb.SszbApp;
import com.ss.sszb.activity.PersonalInformationActivity;
import com.ss.sszb.dialog.ChooseShareTypeDialog;
import com.ss.sszb.dialog.ChooseShareWxImgDialog;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMWeb;
import com.zd.mvp.common.util.StringUtils;import java.io.File;
import java.util.ArrayList;

/**分享多图到微信或者朋友圈工具类*/

public class ShareUtils {/*** 微信7.0版本号,兼容处理微信7.0版本分享到朋友圈不支持多图片的问题*/private static final int VERSION_CODE_FOR_WEI_XIN_VER7 = 1380;/*** 微信包名*/public static final String PACKAGE_NAME_WEI_XIN = "com.tencent.mm";PopupWindow popupWindow;Context context;private String path;//单张图片路径private String content;private Button btn;private Uri[] uris;//多张图片路径uri数组public ShareUtils(Context context){this.context=context;//  this.path=path;//  this.content=content;//  this.btn=btn;showChosePayTypeDialog();}public void setUri(Uri[] uris){this.uris = uris;}public void setPath(String path){this.path = path;}/**选择分享方式弹窗*/ChooseShareWxImgDialog chooseShareTypeDialog;public void showChosePayTypeDialog() {if (chooseShareTypeDialog == null) {chooseShareTypeDialog = new ChooseShareWxImgDialog(context);}chooseShareTypeDialog.show();chooseShareTypeDialog.setChoseTypeListener(new ChooseShareWxImgDialog.setChoseTypeListener() {@Overridepublic void onChoseType(int type) {if (type == 1){//微信if (SszbApp.isWeixinAvilible(context)) {shareWXSomeImg(context,uris);} else {Toast.makeText(context, "请先安装微信", Toast.LENGTH_SHORT).show();}} else if (type == 2) {//朋友圈if (SszbApp.isWeixinAvilible(context)) {shareweipyqSomeImg(context,uris);//拉起微信朋友圈带多张图片} else {Toast.makeText(context, "请先安装微信", Toast.LENGTH_SHORT).show();}}}});}//    private void showpop() {
//        View view= LayoutInflater.from(context).inflate(
//                R.layout.share_view, null);
//        ImageView img_weixin= (ImageView) view.findViewById(R.id.share_weixin);
//        ImageView img_pyq= (ImageView) view.findViewById(R.id.share_pengyouquan);
//        popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT,
//                ViewGroup.LayoutParams.WRAP_CONTENT, true);
//        popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 点击返回按钮popwindow消失
//
//        img_weixin.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                if (StringUtils.isWeixinAvilible(context)) {// 判断是否安装微信客户端
//                    // shareweixin(path);
//                    shareWXSomeImg(context,uris);
//                    // login(SHARE_MEDIA.WEIXIN);
//                } else {
//                    ActivityUtil.showToast(context, "请安装微信客户端");
//                }
//
//                popupWindow.dismiss();
//            }
//        });
//        img_pyq.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//
//                if (StringUtils.isWeixinAvilible(context)) {// 判断是否安装微信客户端
//                    //   shareweipyq(path,content);//拉起微信朋友圈带一张图片
//                    shareweipyqSomeImg(context,uris);//拉起微信朋友圈带多张图片
//                    // login(SHARE_MEDIA.WEIXIN);
//                } else {
//                    ActivityUtil.showToast(context, "请安装微信客户端");
//                }
//                popupWindow.dismiss();
//            }
//        });
//
//        popupWindow.showAtLocation( LayoutInflater.from(context).inflate(
//                R.layout.activity_posterxq, null).findViewById(R.id.img_share), Gravity.BOTTOM, 0, 0);// 先设置popwindow的所有参数,最后再show
//
//    }/*** 拉起微信好友发送单张图片* */private void shareweixin(String path){Uri uriToImage = Uri.fromFile(new File(path));Intent shareIntent = new Intent();//发送图片到朋友圈//ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");//发送图片给好友。ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");shareIntent.setComponent(comp);shareIntent.setAction(Intent.ACTION_SEND);shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);shareIntent.setType("image/jpeg");context.startActivity(Intent.createChooser(shareIntent, "分享图片"));}/*** 拉起微信朋友圈发送单张图片* */private void shareweipyq(String path,String content){Uri uriToImage = Uri.fromFile(new File(path));Intent shareIntent = new Intent();//发送图片到朋友圈ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");//发送图片给好友。
//        ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");shareIntent.setComponent(comp);shareIntent.putExtra("Kdescription", content);shareIntent.setAction(Intent.ACTION_SEND);shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);shareIntent.setType("image/jpeg");context.startActivity(Intent.createChooser(shareIntent, "分享图片"));}/*** 拉起微信朋友圈发送多张图片* */private void shareweipyqSomeImg(Context context,Uri[] uri){Intent shareIntent = new Intent();//1调用系统分享// shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//2添加图片数组ArrayList<Uri> imageUris = new ArrayList<>();for (int i = 0; i < uri.length; i++) {imageUris.add(uri[i]);Log.e("shareIntent",uri[i]+"路径");}if (getVersionCode(context,PACKAGE_NAME_WEI_XIN) < VERSION_CODE_FOR_WEI_XIN_VER7) {// 微信7.0以下版本shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,imageUris);} else {// 微信7.0及以上版本,朋友圈只支持单张图片分享shareIntent.setAction(Intent.ACTION_SEND);shareIntent.putExtra(Intent.EXTRA_STREAM,uri[0]);}shareIntent.setType("image/*");//3指定选择微信ComponentName componentName = new ComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareToTimeLineUI");shareIntent.setComponent(componentName);//4开始分享context.startActivity(Intent.createChooser(shareIntent,"分享图片"));}/*** 拉起微信发送多张图片给好友* */private void shareWXSomeImg(Context context,Uri[] uri){Intent shareIntent = new Intent();//1调用系统分析shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//2添加图片数组ArrayList<Uri> imageUris = new ArrayList<>();for (int i = 0; i < uri.length; i++) {imageUris.add(uri[i]);}shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,imageUris);shareIntent.setType("image/*");//3指定选择微信ComponentName componentName = new ComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareImgUI");shareIntent.setComponent(componentName);//4开始分享context.startActivity(Intent.createChooser(shareIntent,"分享图片"));}/*** 获取制定包名应用的版本的versionCode* @param context* @param* @return*/public static int getVersionCode(Context context,String packageName) {try {PackageManager manager = context.getPackageManager();PackageInfo info = manager.getPackageInfo(packageName, 0);int version = info.versionCode;return version;} catch (Exception e) {e.printStackTrace();return 0;}}}

//弹窗dialog代码

package com.ss.sszb.dialog;import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;import com.ss.sszb.R;/*** @autor: zf* @Description: 选择分享多张图片到微信-朋友圈方式* @Date: 2019/1/23 12:18*/
public class ChooseShareWxImgDialog extends Dialog implements View.OnClickListener {private Context context;private TextView tvCancelshare;private RelativeLayout rl_sharewx,rl_shareqq,rl_sharewb,rl_sharepyq,rl_shareqqzone;private setChoseTypeListener choseTypeListener;public ChooseShareWxImgDialog(@NonNull Context activity) {super(activity, R.style.CustomDialog_Translucent);this.context = activity;setCanceledOnTouchOutside(true); // 点击空白区域可以Dismiss对话框setCancelable(true); // 点击返回按键可以Dismiss对话框init();}@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);init();}public void init() {LayoutInflater inflater = LayoutInflater.from(context);View view = inflater.inflate(R.layout.dialog_sharewx_someimg, null);setContentView(view);tvCancelshare = findViewById(R.id.tvCancelshare);rl_sharewx = findViewById(R.id.rl_sharewx);rl_sharepyq = findViewById(R.id.rl_sharepyq);tvCancelshare.setOnClickListener(this);rl_sharewx.setOnClickListener(this);rl_sharepyq.setOnClickListener(this);Window dialogWindow = getWindow();WindowManager.LayoutParams lp = dialogWindow.getAttributes();dialogWindow.setGravity(Gravity.BOTTOM);DisplayMetrics d = context.getResources().getDisplayMetrics(); // 获取屏幕宽、高用lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 高度设置为屏幕的0.6lp.height = WindowManager.LayoutParams.WRAP_CONTENT;dialogWindow.setAttributes(lp);}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.rl_sharewx:choseTypeListener.onChoseType(1);break;case R.id.rl_sharepyq:choseTypeListener.onChoseType(2);break;case R.id.tvCancelshare:this.dismiss();break;default:this.dismiss();break;}this.dismiss();}public void setChoseTypeListener(setChoseTypeListener listener){this.choseTypeListener = listener;}public interface setChoseTypeListener {void onChoseType(int type);}
}

//样式

<style name="CustomDialog" parent="android:style/Theme.Dialog"><item name="android:windowBackground">@color/colorTransparent</item><item name="android:windowIsTranslucent">false</item><!--半透明--><item name="android:windowNoTitle">true</item><item name="android:backgroundDimEnabled">false</item><!--模糊-->
</style><style name="CustomDialog_Translucent" parent="CustomDialog"><item name="android:windowIsTranslucent">true</item><!--半透明--><item name="android:backgroundDimEnabled">true</item><!--模糊-->
</style>

//dialog布局文件自己定义

4,每次新的页面打开,请求数据回来记得情况把缓存清空,每次只保存新的

PosterXQImgCache.getInstance().removeImgCache();//先清空路径缓存
ImgFileUtils.deleteDir();//删除本地缓存的图片
//缓存图片到本地
for (int i = 0; i < images.size(); i++) {Glide.with(this).load(images.get(i).getPic_url()).asBitmap().into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {ImgFileUtils.saveBitmap(PosterXQActivity.this, resource, StringUtils.setDateTime());}});
}

这样就实现一键转发图片或者文字到微信或者朋友圈的功能,每一个问题的解决都将让你前进一步,加油!

Android一键转发图片多张图片到微信,朋友圈功能实现相关推荐

  1. Android自定义九宫格图片展示,类似微信朋友圈

    之前网上也找了很多类似的功能,但是很多放在列表中复用item就出现高度测量是0,出现条目中图片空间不显示问题 这里做了一些优化,解决该问题 具体可参考这篇博客,(这里要感谢博主)不过这个放在列表复用时 ...

  2. 企业微信应用设置可信域名_怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制?...

    文丨 @语鹦企服私域管家 原创,本文为<企业微信私域流量玩法>专栏第24篇 有小伙伴给小企留言说:企业微信朋友圈功能开放了,请问怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制? ...

  3. html排列图片,css3+html实现微信朋友圈不同尺寸图片排列预览功能

    css 模拟朋友图片不同数量 排列,html 图片排列,微信朋友圈css img 自适应,微信朋友圈照片排列,vue 朋友圈图片预览,微信朋友圈缩略框尺寸,朋友圈图片尺寸,新版微信朋友圈图片大小 ht ...

  4. 总结学过的技术,实现加密注册,登录及过期不能访问,微信朋友圈功能,文章比较长,但是比较详细。

    一.可以使用的技术 开发环境 idea,node.js 技术 虚拟机 Linux,docker mysql,redis jdbc,jsp,servlet mybatis,mybatis-plus sp ...

  5. Flutter 实现微信朋友圈功能

    今天给大家实现一下微信朋友圈的效果,下面是效果图 下面还是老样子,还是以代码的方式进行讲解 import 'package:dio/dio.dart'; import 'package:flutter ...

  6. html手机9张图片显示,微信朋友圈九宫格新玩法,显示一张完成的图片,点击有惊喜...

    经常会在朋友圈看到一组照片,九张能组成一张完整的照片,点开后显示不同的内容,这种方法非常实用,今天我整理了一下方法.先给大家看一张效果图吧. 其实这样的玩法1号店店庆时已经玩过,不过他们店庆的时候的图 ...

  7. android中评论的删除不了,微信朋友圈可以删评论了,但尴尬的是…

    腾讯近期发布的 适用于iOS版本的微信7.0.15 除了拍一拍撤回功能外 其实还有一个隐藏新功能 估计不少人已经发现了 这个隐藏功能 就是大家期盼许久的 删除朋友圈中好友评论 在这之前的的版本中 用户 ...

  8. 第三方应用分享到微信朋友圈功能

    最权威的学习资料还是要去看官网,以及官网提供的Demo,基本上你是可以直接拿来使用的,这是官网网站:http://open.weixin.qq.com/. 在微信分享中主要碰到了如下问题:第一次可以分 ...

  9. 分享多张图片到微信朋友圈

    实现代码如下: [java]  view plain copy Intent intent = new Intent(); ComponentName comp = new ComponentName ...

  10. uniapp图片自适应_uniapp 仿微信朋友圈,微博晒图 图片自适应排版

    data() {return{ imgPicList: [], imgboxtype:0, imgwidth:0, imgpad:0, imgheight:''} }, props: { imgLis ...

最新文章

  1. echart x轴标签偏移_移动端H5页面滑动手势X轴实例
  2. python02-条件语句到循环语句
  3. codeforces D Santa Claus and a Palindrome(hash+贪心)
  4. git修改远程仓库关联
  5. pikachu皮卡丘靶机系统安装~
  6. 1047 行 MySQL 详细学习笔记(值得学习与收藏)
  7. Js拼接嵌套php代码,分享一个js文件中嵌套php会出错的问题
  8. php 事件调度,PHP单元测试调度事件
  9. 小程序 微信红包封面后台独立版 带测评积分功能源码
  10. java 正则表达式大全_Java 正则表达式大全
  11. signature=f89e259b8a982ede42b69434f81f5bc3,利用 cDNA-AFLP技术鉴定马铃薯晚疫病菌小种特异无毒基因候选表达序列...
  12. ng-template、ng-content、ng-container
  13. 完整的十字架(漫画)
  14. SolidWorks_画螺杆
  15. Tair分布式锁 实践经验
  16. https web service(转)
  17. mysql存储过程_mysql存储过程的写法
  18. Python番外篇:电脑读心术程序 快给你的同事朋友玩一玩
  19. SQL Server安全(2/11):身份验证(Authentication)
  20. jsp代码实例第130课

热门文章

  1. 数商云:浅析数字化供应链的现状跟未来
  2. 干货:IT运维管理规划
  3. python中seek方法_python文件操作及seek偏移详解
  4. python优化网站_小旋风网站优化 - 致力于Python高品质站群系统的产品研发
  5. 创意的个人简历tab网站模板
  6. 计算机组装与维护试题精选,《计算机组装与维护》精选试题及答案
  7. Python——百度识图-相似图片爬虫下载解决方案
  8. ThinkPad E450 10.11 驱动HD4400的注意即解决方法_s芃成_新浪博客
  9. 新中大财务软件-A3中怎样更改IP地址
  10. 脚本精灵for+android,脚本精灵 v3.0.8