Home | History | Annotate | Download | only in hwui
      1 package com.android.test.hwui;
      2 
      3 import android.app.Activity;
      4 import android.graphics.Bitmap;
      5 import android.graphics.Bitmap.Config;
      6 import android.graphics.Paint.Style;
      7 import android.graphics.Canvas;
      8 import android.graphics.Color;
      9 import android.graphics.ColorFilter;
     10 import android.graphics.Paint;
     11 import android.graphics.PixelFormat;
     12 import android.graphics.Rect;
     13 import android.graphics.drawable.Drawable;
     14 import android.os.Bundle;
     15 import android.os.Handler;
     16 import android.util.Log;
     17 import android.view.PixelCopy;
     18 import android.view.View;
     19 import android.widget.Button;
     20 import android.widget.ImageView;
     21 import android.widget.LinearLayout;
     22 import android.widget.TextView;
     23 
     24 public class PixelCopyWindow extends Activity {
     25 
     26     private Handler mHandler;
     27     private ImageView mImage;
     28     private TextView mText;
     29 
     30     @Override
     31     protected void onCreate(Bundle savedInstanceState) {
     32         super.onCreate(savedInstanceState);
     33         mHandler = new Handler();
     34 
     35         LinearLayout layout = new LinearLayout(this);
     36         TextView text = new TextView(this);
     37         text.setText("Hello, World!");
     38         Button btn = new Button(this);
     39         btn.setText("Screenshot!");
     40         btn.setOnClickListener((v) -> takeScreenshot());
     41         mImage = new ImageView(this);
     42         mText = new TextView(this);
     43 
     44         layout.setOrientation(LinearLayout.VERTICAL);
     45         layout.addView(text);
     46         layout.addView(btn);
     47         layout.addView(mImage);
     48         layout.addView(mText);
     49         final float density = getResources().getDisplayMetrics().density;
     50         layout.setBackground(new Drawable() {
     51             Paint mPaint = new Paint();
     52 
     53             @Override
     54             public void draw(Canvas canvas) {
     55                 mPaint.setStyle(Style.STROKE);
     56                 mPaint.setStrokeWidth(4 * density);
     57                 mPaint.setColor(Color.BLUE);
     58                 final Rect bounds = getBounds();
     59                 canvas.drawRect(bounds, mPaint);
     60                 mPaint.setColor(Color.RED);
     61                 canvas.drawLine(bounds.centerX(), 0, bounds.centerX(), bounds.height(), mPaint);
     62                 mPaint.setColor(Color.GREEN);
     63                 canvas.drawLine(0, bounds.centerY(), bounds.width(), bounds.centerY(), mPaint);
     64             }
     65 
     66             @Override
     67             public void setAlpha(int alpha) {
     68             }
     69 
     70             @Override
     71             public void setColorFilter(ColorFilter colorFilter) {
     72             }
     73 
     74             @Override
     75             public int getOpacity() {
     76                 return PixelFormat.TRANSLUCENT;
     77             }
     78         });
     79         setContentView(layout);
     80     }
     81 
     82     private void takeScreenshot() {
     83         View decor = getWindow().getDecorView();
     84         Rect srcRect = new Rect();
     85         decor.getGlobalVisibleRect(srcRect);
     86         final Bitmap bitmap = Bitmap.createBitmap(
     87                 (int) (srcRect.width() * .25), (int) (srcRect.height() * .25), Config.ARGB_8888);
     88         PixelCopy.request(getWindow(), srcRect, bitmap, (result) -> {
     89             if (result != PixelCopy.SUCCESS) {
     90                 mText.setText("Copy failed, result: " + result);
     91                 mImage.setImageBitmap(null);
     92             } else {
     93                 mText.setText("");
     94                 mImage.setImageBitmap(bitmap);
     95             }
     96         }, mHandler);
     97     }
     98 }
     99