Android实现截屏和截长图功能的各种方法

  微信好友或者朋友圈的分享,可以是普通的截图分享,也可以是截取长图的分享,甚至还会有需求让你拼上生成的二维码和logo图片,下面我们直接来看看这些方法的使用:


先说一下拼接三张不同的图片后有黑色背景的解决方案(在下面的6拼接合成图片的方法里加上就可以了):

//设置画布背景色为白色,即自定义控件显示的背景色为白色:
        canvas.drawRGB(255,255,255);

1.普通的截屏方法

/**
     * 截屏
     *
     * @param activity
     * @return
     */
    public static Bitmap activityShot(Activity activity) {
       /*获取windows中最顶层的view*/
        View view = activity.getWindow().getDecorView();
        //允许当前窗口保存缓存信息
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        //获取状态栏高度
        Rect rect = new Rect();
        view.getWindowVisibleDisplayFrame(rect);
        int statusBarHeight = rect.top;
        WindowManager windowManager = activity.getWindowManager();
        //获取屏幕宽和高
        DisplayMetrics outMetrics = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(outMetrics);
        int width = outMetrics.widthPixels;
        int height = outMetrics.heightPixels;
        //去掉状态栏
        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width, height - statusBarHeight);
        //销毁缓存信息
        view.destroyDrawingCache();
        view.setDrawingCacheEnabled(false);
        return bitmap;
    }

2.截取scrollView的屏幕方法

/**
     * 截取scrollview的屏幕
     * @param scrollView
     * @return
     */
    public static Bitmap getBitmapByView(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap = null;
        // 获取listView实际高度
        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
            scrollView.getChildAt(i).setBackgroundResource(R.drawable.white_drawable);
        }

        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        scrollView.draw(canvas);
        // 测试输出
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/screen_test.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            // TODO: handle exception
        }
        return bitmap;
    }

3.截取ListvListView的屏幕方法

/**
     *  截图listview
     * **/
    public static Bitmap getbBitmap(ListView listView) {
        int h = 0;
        Bitmap bitmap = null;
        // 获取listView实际高度
        for (int i = 0; i < listView.getChildCount(); i++) {
            h += listView.getChildAt(i).getHeight();
        }

        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(listView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        listView.draw(canvas);
        // 测试输出
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/screen_test.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            // TODO: handle exception
        }
        return bitmap;
    }

4.截取线性布局或相对布局屏幕的方法

/**
     * 截取RelativeLayout
     **/
    public static Bitmap getRelativeLayoutBitmap(RelativeLayout relativeLayout) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < relativeLayout.getChildCount(); i++) {
            h += relativeLayout.getChildAt(i).getHeight();
        }
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(relativeLayout.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        relativeLayout.draw(canvas);
        return bitmap;
    }
    /**
     * 截取LinearLayout
     **/
    public static Bitmap getLinearLayoutBitmap(LinearLayout linearLayout) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < linearLayout.getChildCount(); i++) {
            h += linearLayout.getChildAt(i).getHeight();
        }
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(linearLayout.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        linearLayout.draw(canvas);
        return bitmap;
    }

5.截取除了导航栏之外的整个屏幕

/**
     * 截取除了导航栏之外的整个屏幕
     */
    public static Bitmap screenShotWholeScreen(Activity activity) {
        View dView = activity.getWindow().getDecorView();
        dView.setDrawingCacheEnabled(true);
        dView.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());
        return bitmap;
    }

6.拼接合成图片的方法

 //合成三张图片
    private static Bitmap mergeBitmap(Bitmap firstBitmap, Bitmap secondBitmap, Bitmap threeBitmap) {
        Bitmap bitmap = Bitmap.createBitmap(firstBitmap.getWidth(), firstBitmap.getHeight() + secondBitmap.getHeight() + threeBitmap.getHeight(), firstBitmap.getConfig());
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(firstBitmap, new Matrix(), null);
        canvas.drawBitmap(secondBitmap, 0, firstBitmap.getHeight(), null);
        canvas.drawBitmap(threeBitmap, secondBitmap.getWidth(), firstBitmap.getHeight(), null);
        return bitmap;
    }
    //合成两张图片
    public static Bitmap mergeBitmap(Bitmap firstBitmap, Bitmap secondBitmap) {
        Bitmap bitmap = Bitmap.createBitmap(firstBitmap.getWidth(), firstBitmap.getHeight(),firstBitmap.getConfig());
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(firstBitmap, new Matrix(), null);
        canvas.drawBitmap(secondBitmap, 0, 0, null);
        return bitmap;
    }

7.具体的调用和拼接合成图片:

     Bitmap bitmap = StringUtil.activityShot(JCZQTDetailActivity.this);
                Bitmap bitmap = StringUtil.getBitmapByView(scrollView_jc_type);//截取长图
//                Bitmap bitmap = StringUtil.getRelativeLayoutBitmap(rl_jc_all);
//                Bitmap bitmap1 = StringUtil.screenShotWholeScreen(JCZQTDetailActivity.this);
//                Bitmap bitmap2 = ShareUtil.mergeBitmap(bitmap, bitmap1);ShareUtil.weiChatPic(Constants.wx_api, 7, MakeReceiptDetailsActivity.this, bitmap2);

8.微信分享图片方法和链接生成二维码图片方法:

扫描二维码关注公众号,回复: 944517 查看本文章
 /**
     * 分享 图片
     */
    public static void weiChatPic(IWXAPI api, int flag, Context context, Bitmap bitmap) {
        if (api.isWXAppInstalled()) {//判断微信是否安装
            //Bitmap mWXShareBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.logo_icon);//将截屏得到的bitmap赋值
            GlobalLog.e("sgf", "-------GlobalEntity.USER.getUrl()-------" + GlobalConfig.getURL(context));
            if ("".equals(GlobalConfig.getURL(context)) || "null".equals(GlobalConfig.getURL(context))) {
                Intent intent = new Intent(context, LoginActivity.class);
                context.startActivity(intent);
                return;
            }
            loadRQInfo(GlobalConfig.getURL(context));
            Bitmap b = BitmapFactory.decodeResource(context.getResources(), R.drawable.sharewinlogo);
            GlobalLog.e("sgf", "-------bitmap-------" + bitmap);
            GlobalLog.e("sgf", "-------bitmaps-------" + bitmaps);
            GlobalLog.e("sgf", "-------b-------" + b);
            Bitmap bitmap1 = mergeBitmap(bitmap, bitmaps, b);

            WXImageObject imgObject = new WXImageObject(bitmap1);
            //imgObject.imagePath
            WXMediaMessage mediaMessage = new WXMediaMessage();
            mediaMessage.mediaObject = imgObject;

            //设置缩略图
            Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap1, bitmap1.getWidth() / 10, bitmap1.getHeight() / 10, true);
            mediaMessage.thumbData = bmpToByteArray(thumbBmp, true);
            SendMessageToWX.Req req = new SendMessageToWX.Req();
            req.transaction = buildTransaction("img");//分享类型是图片
            req.message = mediaMessage;
            //表示发送给朋友圈  WXSceneTimeline  表示发送给朋友  WXSceneSession
            req.scene = flag == 7 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;
            api.sendReq(req);
            GlobalLog.e("sgf", "-------end-------");

        } else {
            Toast.makeText(context, "您没有安装微信客户端", Toast.LENGTH_SHORT).show();
        }
 /**
     * 生成万二维码
     *
     * @param soldUrl
     */
    private static void loadRQInfo(String soldUrl) {
        //回收bitmaps
        if (null != bitmaps && !bitmaps.isRecycled()) {
            bitmaps.recycle();
            bitmaps = null;
        }
        try {
            bitmaps = StringUtil.makeQRImage(soldUrl, 480, 350);
        } catch (WriterException e) {
            e.printStackTrace();
        }
    }


9.项目中的StringUtil类,在此分享出来:

package com.yasenagat.yy.rf.util;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Environment;
import android.text.Html;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.yasenagat.yy.rf.R;
import com.yasenagat.yy.rf.common.GlobalException;
import com.yasenagat.yy.rf.common.GlobalLog;

import static com.yasenagat.yy.rf.R.id.iv_codes_qr;
import static com.yasenagat.yy.rf.R.id.linearLayout;

public class StringUtil {

    private static int counter = 0;
    private static final String TAG = "StringUtil";

    public static boolean isEmpty(String str) {
        if (null == str || str.trim().equals("")) {
            return true;
        }
        return false;
    }

    public static boolean isEmptyMoney(String str) {
        try {
            if (null == str || str.equals("") || str.equals("0")
                    || str.equals("0.00") || 0 == Double.parseDouble(str)) {
                return true;
            }

            if (Double.parseDouble(str) == 0) {
                return true;
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return false;
        }
        return false;
    }

    // String five_before = hitlistsBean.getHit_five().substring(0, hitlistsBean.getHit_five().indexOf(":"));
    //String five_after = hitlistsBean.getHit_five().substring(hitlistsBean.getHit_five().indexOf(":") + 1, hitlistsBean.getHit_five().length());

    /**
     * 截取字符串的前半截
     *
     * @param str
     * @return
     */
    public static String subStringBefore(String str) {
        String beforeStr = str.substring(0, str.indexOf(":"));
        return beforeStr;
    }

    /**
     * 截取字符串的后半截
     *
     * @param str
     * @return
     */
    public static String subStringAfter(String str) {
        String afterStr = str.substring(str.indexOf(":") + 1, str.length());
        return afterStr;
    }

    /**
     * 截取":" 字符的字符串数组
     *
     * @param str
     * @return 返回一个数组
     */
    public static String[] subStringArray_one(String str) {
        String StrArray[] = str.split(":");

        return StrArray;
    }

    /**
     * 截取":" 字符的字符串数组
     *
     * @param str
     * @return 返回一个数组
     */
    public static String[] subStringArray_two(String str) {
        String[] StrArray = str.split(",");
        return StrArray;
    }

    /**
     * 截取":" 字符的字符串数组
     *
     * @param str
     * @return 返回一个数组
     */
    public static String[] subStringArray_three(String str) {
        String[] StrArray = subStringArray_two(str);
        //for(){}
        return StrArray;
    }

    /**
     * 判断str1中包含str2的个数
     *
     * @param str1
     * @param str2
     * @return counter
     */
    public static int countStr(char str1, String str2) {

        int countss = 0;
        for (int i = 0; i < str2.length(); i++) {
            if (str2.charAt(i) == str1) {
                countss++;
            }
        }

        return countss;
    }

    /**
     * 截取()中的字符串
     *
     * @param str2
     * @return counter
     */
    public static String countStrParentheses(String str2) {
        // TODO SGF ADD
        String str1 = "";
        Pattern pattern = Pattern.compile("(?<=\\()[^\\)]+");
        Matcher matcher = pattern.matcher(str2);
        while (matcher.find()) {
            str1 = matcher.group();
        }

        return str1;
    }

    /**
     * 1:0:1:0:1
     *
     * @param
     * @return
     */

    public static String[] getCount(String a, String b) {
        String[] arrayStr = {};
        arrayStr = a.split(b);
        return arrayStr;
    }

    public static boolean isZero(String m1) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal("0");
        return b1.compareTo(b2) == 0;
    }

    // public static boolean checkPhone(String phone) {
    // if (null == phone || !phone.matches("^1[3-8]+\\d{9}")) {
    // return false;
    // }
    // return true;
    // }
    //
    // public static boolean checkPassword(String password) {
    // if (null == password || !password.matches("[a-f A-F 0-9]{6-15}")) {
    // return false;
    // }
    // return true;
    // }

    /**
     * 将分转化为元
     *
     * @param str
     * @return fen->yuan 112000(分)-> 1120.00(元)
     */
    public static String formatMoney_FenToYuan(String str) {

        try {
            GlobalLog.d(TAG, "formatMoney_FenToYuan : " + str);
            if (!isEmpty(str)) {
                if (str.equals("0")) {
                    return "0";
                } else if (str.endsWith("00")) {
                    GlobalLog.d(TAG, str.substring(0, str.length() - 2));
                    return new BigDecimal(str.substring(0, str.length() - 2))
                            .toString();
                } else {
                    return BigDecimal.valueOf(new BigDecimal(str).longValue(),
                            2).toString();
                }
            }

        } catch (Exception e) {
            GlobalException.proxy.handle(e, null);
        }

        return "0.00";
    }

    /**
     * @param str
     * @return 5->5.00
     */
    public static String formatMoney_Yuan(String str) {

        if (!isEmpty(str)) {
            return str + ".00";
        }

        return "0.00";
    }

    /**
     * @param str
     * @return 5->500
     */
    public static String formatMoney_Fen(String str) {

        if (!isEmpty(str)) {

            double ret = Double.valueOf(str) * 100;
            return String.valueOf((int) ret);
//            return str + "00";
        }

        return "0";
    }

    /**
     * @param str
     * @return 5->500
     */
    public static String format_FenToYuan(String str) {
        //TODO SGF  ADD

        if (!isEmpty(str)) {

            double ret = Double.valueOf(str) / 100;
            return String.valueOf((int) ret);
//            return str + "00";
        }

        return "0";
    }

    /**
     * @param m1
     * @param m2
     * @return true m1 > m2
     */
    public static boolean greaterThanMoney(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == 1;
    }

    /**
     * @param m1
     * @param m2
     * @return
     */
    public static boolean greaterEqualMoney(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == 1 || b1.compareTo(b2) == 0;
    }

    public static boolean greaterThanZero(String m1) {
        return greaterThan(m1, "0");
    }

    public static boolean greaterEqualZero(String m1) {
        return greaterEqual(m1, "0");
    }

    public static boolean greaterEqual(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }

        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == 1 || b1.compareTo(b2) == 0;
    }

    public static boolean greaterThan(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }

        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == 1 || b1.compareTo(b2) == 0;
    }

    public static boolean lessEqualZero(String m1) {
        return lessEqual(m1, "0");
    }

    public static boolean lessThanZero(String m1) {
        return lessThan(m1, "0");
    }

    public static boolean lessEqual(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == -1 || b1.compareTo(b2) == 0;
    }

    /**
     * 比较大小
     *
     * @param m1
     * @param m2
     * @return
     */
    public static boolean lessThan(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == -1;
    }

    /**
     * @param m1
     * @param m2
     * @return true m1 >= m2
     */
    public static boolean compareMoneyEqual(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.compareTo(b2) == 1 || b1.compareTo(b2) == 0;
    }

    public static boolean isMoneyZero(String m1) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal("0");
        return b1.compareTo(b2) == 0;
    }

    /**
     * 加法运算
     *
     * @param m1 "1.7"
     * @param m2 "7.85"
     * @return "1.7" + "7.85" => 9.55
     */
    public static String add(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.add(b2).toString();
    }

    public static String add(String m1, String m2, String m3) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        if (isEmpty(m3)) {
            m3 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        BigDecimal b3 = new BigDecimal(m3);
        return b1.add(b2).add(b3).toString();
    }

    /**
     * 减法运算
     *
     * @param m1 2.3
     * @param m2 1.1
     * @return 1.2
     */
    public static String subtract(String m1, String m2) {
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.subtract(b2).toString();
    }

    /**
     * @param m1
     * @param m2
     * @return
     */
    public static String divide(String m1, String m2) {
        GlobalLog.d(TAG, "m1 : " + m1 + " m2 : " + m2);
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "1";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.divide(b2, 2, RoundingMode.HALF_UP).toString();
    }

    /**
     * 乘法运算
     *
     * @param m1 参数1
     * @param m2 参数2
     * @return 两个数相乘
     */
    public static String multiply(String m1, String m2) {
        GlobalLog.d(TAG, "m1 : " + m1 + " ; m2 : " + m2);
        if (isEmpty(m1)) {
            m1 = "0";
        }
        if (isEmpty(m2)) {
            m2 = "0";
        }
        BigDecimal b1 = new BigDecimal(m1);
        BigDecimal b2 = new BigDecimal(m2);
        return b1.multiply(b2).toString();
    }

    public static String getProgress(int progress) {
        return (progress / 20) + "";
    }

    public static String getLimit(String total_unit) {
        double l = Double.valueOf(total_unit);
        return (int) Math.max(Math.round(l * 0.05), 1) + "";
    }

    private static BigDecimal one_hundred_million = new BigDecimal("100000000");
    private static BigDecimal ten_thousand = new BigDecimal("10000");
    private static BigDecimal hundred_thousand = new BigDecimal("100000");
    private static BigDecimal one_million = new BigDecimal("1000000");
    private static BigDecimal ten_million = new BigDecimal("10000000");

    public static String formatMoney_Chinese(String m) {

        BigDecimal b1 = new BigDecimal(m);
        BigDecimal b2 = b1.divide(one_hundred_million);

        if (b2.doubleValue() >= 10) {
            return b2.toString() + "亿";
        } else if (b2.doubleValue() >= 1) {
            return b1.divide(one_hundred_million).setScale(2,
                    RoundingMode.HALF_DOWN)
                    + "亿";
        } else {
            b2 = b1.divide(ten_million);
            if (b2.intValue() > 0) {
                System.out.println(b2);
                return b2.multiply(new BigDecimal(1000))
                        .setScale(1, RoundingMode.HALF_DOWN).toString()
                        + "万";

            } else {
                b2 = b1.divide(one_million);
                if (b2.intValue() > 0) {

                    return b2.multiply(new BigDecimal(100))
                            .setScale(0, RoundingMode.HALF_DOWN).toString()
                            + "万";
                } else {
                    b2 = b1.divide(hundred_thousand);
                    if (b2.intValue() > 0) {
                        return b2.multiply(new BigDecimal(10))
                                .setScale(0, RoundingMode.HALF_DOWN).toString()
                                + "万";
                    } else {
                        b2 = b1.divide(ten_thousand);
                        if (b2.intValue() > 0) {
                            return b2.setScale(2, RoundingMode.HALF_DOWN) + "万";
                        }
                        return m + "元";
                    }
                }
            }
        }

    }

    /**
     * 是否显示出票明细
     *
     * @param issueState
     * @return
     */
    public static boolean isCanShowTicket(String issueState) {

        try {

            if (issueState.startsWith("QC@")) {
                String str = issueState.substring(3);
                if (Integer.parseInt(str) > 1) {
                    return true;
                }
                GlobalLog.d(TAG, str);
            } else {
                return false;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }

    public static boolean verifyPassword(String password) {

        if (isEmpty(password)) {
            return false;
        } else if (password.matches("^[0-9a-zA-Z]{6,15}$")) {
            return true;
        }

        return false;
    }

    /**
     * 手机号码验证
     */
    public static boolean verifyPhoneNumber(String phone) {
        if (isEmpty(phone)) {
            return false;
        } else if (!phone.startsWith("1")) {
            return false;
        } else if (phone.length() == 11) {
            return true;
        }
//        if (phone
//                .matches("^((13[0-9])|(15[^4,\\D])|(18[0,5-9])|(170))\\d{8}$")) {
//            return true;
//        }

        return false;
    }

    // /** 数字验证 */
    // public static boolean verifyNumeric(String paramString) {
    // return Pattern.compile("[0-9]*").matcher(paramString).matches();
    // }

    /**
     * 用户名验证 "^[^0-9]\\w{3,16}$"
     */
    public static boolean verifyUsername(String username) {
        if (isEmpty(username)) {
            return false;
        } else if (username.matches("[\u4E00-\u9FA5a-zA-Z]{1}[\u4E00-\u9FA5a-zA-Z0-9]{2,15}")) {
            return true;
        }
        return false;
    }

    // /** 密码验证 */
    // public static boolean verifyPassword(String paramString) {
    // return Pattern.compile("^[A-Za-z0-9]{6,16}$")
    // .matcher(paramString)
    // .matches();
    // }

    public static boolean verifyEmail(String paramString) {
        return Pattern
                .compile("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w+)\\s*$")
                .matcher(paramString).matches();
    }

    public static boolean verifyIDCard(String validateStr) {
        String regex = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        if (!pattern.matcher(validateStr).matches()) {
            return false;
        }
        return true;
    }


    /**
     * 校验密码有 6到18位 字母和数字 组成 的正则
     *
     * @param passStr
     * @return
     */
    public static boolean verifyPasswordLen(String passStr) {
        String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,18}$";
        return passStr.matches(regex);
    }
    /**
     * 校验输入框小数点后面只能有2位数字 的正则
     *
     * @param passStr
     * @return
     */
    public static boolean verifTwo(String passStr) {
        String regex = "^\\d{1,8}(\\.\\d{1,2})?$";
        return passStr.matches(regex);
    }

    /**
     * 校验输入框只能输入数字 的正则
     *
     * @param passStr
     * @return
     */
    public static boolean verifNum(String passStr) {
        String regex = "^[0-9]*[1-9][0-9]*$";
        return passStr.matches(regex);
    }

    public static String getLast_2(String issue) {
        if (StringUtil.isEmpty(issue)) {
            return "";
        } else {
            return issue.substring(issue.length() - 2);
        }
    }

    public static String getLast_3(String issue) {
        if (StringUtil.isEmpty(issue)) {
            return "";
        } else {
            return issue.substring(issue.length() - 3);
        }
    }

    public static Map<String, String> parseData(String data) {

        Map<String, String> retMap = new HashMap<String, String>();

        String[] items = data.split("#");
        String[] item = null;
        for (String i : items) {
            item = i.split("=");
            if (item.length >= 2) {
                retMap.put(item[0], item[1]);
            }
        }

//        for (String key : retMap.keySet()) {
//            System.out.println(key + " : " + retMap.get(key));
//        }

        return retMap;
    }

    public static String setStrRed(String str) {
        return "<font color='red'>" + str + "</font>";
    }
    //白色
    public static String setStrWhite(String str) {
        return "<font color='#ffffff'>" + str + "</font>";
    }

    public static String setStrMainRed(String str) {
        return "<font color='#f33b3b'>" + str + "</font>";
    }
    //灰色
    public static String setStrGray(String str) {
        return "<font color='#888888'>" + str + "</font>";
    }

    public static String setStrOrenge(String str) {
        return "<font color='#ff9e14'>" + str + "</font>";
    }
    //竞彩篮球-绿色
    public static String setStrGreen(String str) {
        return "<font color='#4bc160'>" + str + "</font>";
    }

    public static String setStrBlack(String str) {
        return "<font color='#313131'>" + str + "</font>";
    }

    public static String setStrOrange(String str) {
        return "<font color='#FF3D3D'>" + str + "</font>";
    }

    public static String setStrRedBold(String str) {
        return "<b><font color='red'>" + str + "</font></>";
    }

    public static String setStrBold(String str) {
        return "<b>" + str + "</b>";
    }

    public static List<String> getNumList(int start, int end) {

        List<String> list = new ArrayList<String>();
        for (int i = start; i <= end; i++) {
            list.add(i + "");
        }
        return list;
    }

    public static String setWinCodeRed(String drawCode, String code) {

        StringBuffer retBuf = new StringBuffer("");

        String[] drawCodes = drawCode.split(",");

        List<String> codes = new ArrayList<String>();

        for (String c : code.split(",")) {
            codes.add(c);
        }

        for (String d : drawCodes) {

            if (codes.contains(d)) {
                retBuf.append(setStrRed(d));
                retBuf.append(" ");
            } else {
                retBuf.append(d);
                retBuf.append(" ");
            }
        }

        return retBuf.toString();
    }

    public static boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }

    public static String getString(String str) {
        if (isEmpty(str)) {
            return "";
        }
        return str.trim();
    }

    /**
     * 生成创建二维码
     */
    public static Bitmap createQRImage(String url, int QR_WIDTH, int QR_HEIGHT) throws WriterException {

        // 判断URL合法性
        if (url == null || "".equals(url) || url.length() < 1) {
            return null;
        }
        Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 图像数据转换,使用了矩阵转换
        BitMatrix bitMatrix = new QRCodeWriter().encode(url,
                BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
        int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
        // 下面这里按照二维码的算法,逐个生成二维码的图片,
        // 两个for循环是图片横列扫描的结果
        for (int y = 0; y < QR_HEIGHT; y++) {
            for (int x = 0; x < QR_WIDTH; x++) {
                if (bitMatrix.get(x, y)) {
                    pixels[y * QR_WIDTH + x] = 0xff000000;
                } else {
                    // pixels[y * QR_WIDTH + x] = 0xffffffff;
                }
            }
        }
        // 生成二维码图片的格式,使用ARGB_8888
        Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
                Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
        //TODO WH 显示到一个ImageView上面
        //iv_codes_qr.setImageBitmap(bitmap);
        return bitmap;

    }

    /**
     * 根据指定内容生成自定义宽高的二维码图片
     *
     * @param content 需要生成二维码的内容
     * @param width   二维码宽度
     * @param height  二维码高度
     * @throws WriterException 生成二维码异常
     */
    public static Bitmap makeQRImage(String content, int width, int height)
            throws WriterException {
        // 判断URL合法性
        if (!isNoBlankAndNoNull(content))
            return null;

        Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        // 图像数据转换,使用了矩阵转换
        BitMatrix bitMatrix = new QRCodeWriter().encode(content,
                BarcodeFormat.QR_CODE, width, height, hints);
        int[] pixels = new int[width * height];
        // 按照二维码的算法,逐个生成二维码的图片,两个for循环是图片横列扫描的结果
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                if (bitMatrix.get(x, y))
                    pixels[y * width + x] = 0xff000000;
                else {
                    pixels[y * width + x] = 0xffffffff;
                }
            }
        }
        // 生成二维码图片的格式,使用ARGB_8888
        Bitmap bitmap = Bitmap.createBitmap(width, height,
                Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

        return bitmap;
    }

    /**
     * 判断字符串是否非空非null
     *
     * @param strParm 需要判断的字符串
     * @return 真假
     */
    public static boolean isNoBlankAndNoNull(String strParm) {
        return !((strParm == null) || (strParm.equals("")));
    }


    /**
     * 指定目录写入文件内容
     *
     * @param filePath 文件路径+文件名
     * @param
     * @throws IOException
     */
    public static void saveAsJPEG(Bitmap bitmap, String filePath)
            throws IOException {
        FileOutputStream fos = null;

        try {
            File file = new File(filePath);
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
        } finally {
            if (fos != null) {
                fos.close();
            }
        }
    }

    /**
     * 是否有内存
     *
     * @return
     */
    public static boolean isMountedSDCard() {
        if (Environment.MEDIA_MOUNTED.equals(Environment
                .getExternalStorageState())) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 截屏
     *
     * @param activity
     * @return
     */
    public static Bitmap activityShot(Activity activity) {
       /*获取windows中最顶层的view*/
        View view = activity.getWindow().getDecorView();
        //允许当前窗口保存缓存信息
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        //获取状态栏高度
        Rect rect = new Rect();
        view.getWindowVisibleDisplayFrame(rect);
        int statusBarHeight = rect.top;
        WindowManager windowManager = activity.getWindowManager();
        //获取屏幕宽和高
        DisplayMetrics outMetrics = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(outMetrics);
        int width = outMetrics.widthPixels;
        int height = outMetrics.heightPixels;
        //去掉状态栏
        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width, height - statusBarHeight);
        //销毁缓存信息
        view.destroyDrawingCache();
        view.setDrawingCacheEnabled(false);
        return bitmap;
    }

    /**
     * 截取scrollview的屏幕
     * @param scrollView
     * @return
     */
    public static Bitmap getBitmapByView(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap = null;
        // 获取listView实际高度
        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
            scrollView.getChildAt(i).setBackgroundResource(R.drawable.white_drawable);
        }

        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        scrollView.draw(canvas);
        // 测试输出
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/screen_test.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            // TODO: handle exception
        }
        return bitmap;
    }
    /**
     *  截图listview
     * **/
    public static Bitmap getbBitmap(ListView listView) {
        int h = 0;
        Bitmap bitmap = null;
        // 获取listView实际高度
        for (int i = 0; i < listView.getChildCount(); i++) {
            h += listView.getChildAt(i).getHeight();
        }

        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(listView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        listView.draw(canvas);
        // 测试输出
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("/sdcard/screen_test.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
            // TODO: handle exception
        }
        return bitmap;
    }
    /**
     * 截取RelativeLayout
     **/
    public static Bitmap getRelativeLayoutBitmap(RelativeLayout relativeLayout) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < relativeLayout.getChildCount(); i++) {
            h += relativeLayout.getChildAt(i).getHeight();
        }
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(relativeLayout.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        relativeLayout.draw(canvas);
        return bitmap;
    }
    /**
     * 截取LinearLayout
     **/
    public static Bitmap getLinearLayoutBitmap(LinearLayout linearLayout) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < linearLayout.getChildCount(); i++) {
            h += linearLayout.getChildAt(i).getHeight();
        }
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(linearLayout.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        linearLayout.draw(canvas);
        return bitmap;
    }
    /**
     * 截取除了导航栏之外的整个屏幕
     */
    public static Bitmap screenShotWholeScreen(Activity activity) {
        View dView = activity.getWindow().getDecorView();
        dView.setDrawingCacheEnabled(true);
        dView.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());
        return bitmap;
    }
} 
 
 

 
 


猜你喜欢

转载自blog.csdn.net/shenggaofei/article/details/80082610