Androidは共有長図を生成し、全図透かしを追加する

8674 ワード

他人の労働成果を尊重し、転載は出典を明記してください.http://blog.csdn.net/gengqiquan/article/details/65938021,本文出典:【gengqiquanのブログ】
リーダーは最近、携程のスクリーンショットの成長図の共有効果が良いと思っているので、私たちも追加しました.製品は分かち合う長い図が会社のブランドの透かしを加える必要があると思って、そこで私たちも追加しました;ええ、事件の原因はこうです.長図は一般にScrolViewとListViewである.この2つのコントロールの完全な表示画像を取得する必要があります.原理は簡単で、コントロールの長さと幅が一致するキャンバスを作ります(つまり、高さと幅が等しいbitmapを作成します).コントロールのdrawメソッドを呼び出してキャンバスに自分を描きます.2つのコントロールの長図取得方法をそれぞれ貼り付けます
 /**
     *   scrollview   
     **/
    public static Bitmap getScrollViewBitmap(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
        }
        //        bitmap

        bitmap = Bitmap.createBitmap(ScreenUtils.getScreenWidth(scrollView.getContext()), h,
                Bitmap.Config.ARGB_4444);
        final Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.parseColor("#f2f7fa"));
        scrollView.draw(canvas);
        return bitmap;
    }
 /**
     *   listview
     **/
    public static Bitmap getListViewBitmap(ListView listView, String picpath) {
        int h = 0;
        Bitmap bitmap;
        //   listView    
        for (int i = 0; i < listView.getChildCount(); i++) {
            h += listView.getChildAt(i).getHeight();
        }
listView.getHeight());
        //        bitmap
        bitmap = Bitmap.createBitmap(listView.getWidth(), h,
                Bitmap.Config.RGB_565);
        final Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE);
        listView.draw(canvas);
        //     
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(picpath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (null != out) {
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
        } catch (IOException e) {
        }
        return bitmap;
    }

具体的なviewの表示図を取得する方法を差し上げます

    /**
     *     view   
     *
     * @author gengqiquan
     * @date 2017/3/20   10:34
     */
    public static Bitmap getViewDrawingCacheBitmap(View view) {
        view = view.getRootView();
        if (!view.isDrawingCacheEnabled()) {
            view.setDrawingCacheEnabled(true);
        }
        view.destroyDrawingCache();
        view.buildDrawingCache();
        Bitmap bm = view.getDrawingCache();
        view.setDrawingCacheEnabled(false);
        return bm;
    }

LinearLayoutピクチャを生成する方法をもう一つ差し上げます
/**
     *     LinearLayout   
     *
     * @author gengqiquan
     * @date 2017/3/20   10:34
     */
    public static Bitmap getLinearLayoutBitmap(LinearLayout linearLayout) {
        int h = 0;
        //   LinearLayout    
        for (int i = 0; i < linearLayout.getChildCount(); i++) {
            linearLayout.getChildAt(i).measure(0, 0);
            h += linearLayout.getChildAt(i).getMeasuredHeight();
        }
        linearLayout.measure(0, 0);
        //        bitmap
        Bitmap bitmap = Bitmap.createBitmap(linearLayout.getMeasuredWidth(), h,
                Bitmap.Config.RGB_565);
        final Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE);
        linearLayout.draw(canvas);
        return bitmap;
    }

製品が終わったら、必ず下か上に会社のロゴ画像をつけさせます.うん.良い人は低くして、更にピクチャーの方法をつなぎます
/**
*    
 * @param first      
 * @param second    logo 
*@author gengqiquan
*@date 2017/3/25   4:56
*/
    public static Bitmap add2Bitmap(Bitmap first, Bitmap second) {
        float scale = ((float) first.getWidth()) / second.getWidth();
        second = ImageUtil.scaleImg(second, scale);
        int width = first.getWidth();
        int height = first.getHeight() + second.getHeight();
        Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
        Canvas canvas = new Canvas(result);
        canvas.drawBitmap(first, 0, 0, null);
        canvas.drawBitmap(second, 0, first.getHeight(), null);
        return result;
    }

全図透かしを追加する方法をもう一つ追加します
/**
     * @param first    
     * @param mark     
     * @author gengqiquan
     * @date 2017/3/25   4:58
     */
     public static Bitmap waterMark(Bitmap first, Bitmap mark) {
        float scale = ((float) first.getWidth()) / mark.getWidth();
        mark = ImageUtil.scaleImg(mark, scale);
        int height = first.getHeight();
        Canvas canvas = new Canvas(first);
        int h = 0;
        while (h < height + mark.getHeight()) {
            canvas.drawBitmap(mark, 0, h, null);
            h = h + mark.getHeight();
        }
        return first;
    }

坑父のchromeにはバグがある.この位置で改行して上ボタンを押すとクラッシュします.ブログを書くのが七、八回も崩れた.最近本当に運が悪いですね.
実は私は言いたいのです:最近対象を注入されて、依存性が比較的に強いため、この時間はめったにブログを書くことがなくて、後で補充します.
何かアドバイスがあればコメントしてくださいね
もし私のブログがあなたに役に立つなら、伝言を残して励ましたり、いいねを押したりしてください.
私はQQグループ(グループ番号:121606151)を建てて、Androidの技術問題を議論するために使用して、興味があるのは加えて、みんなで進歩することができます.