| package com.android.test.hwui; |
| |
| import android.app.Activity; |
| import android.graphics.Bitmap; |
| import android.graphics.Bitmap.Config; |
| import android.graphics.Paint.Style; |
| import android.graphics.Canvas; |
| import android.graphics.Color; |
| import android.graphics.ColorFilter; |
| import android.graphics.Paint; |
| import android.graphics.PixelFormat; |
| import android.graphics.Rect; |
| import android.graphics.drawable.Drawable; |
| import android.os.Bundle; |
| import android.os.Handler; |
| import android.util.Log; |
| import android.view.PixelCopy; |
| import android.view.View; |
| import android.widget.Button; |
| import android.widget.ImageView; |
| import android.widget.LinearLayout; |
| import android.widget.TextView; |
| |
| public class PixelCopyWindow extends Activity { |
| |
| private Handler mHandler; |
| private ImageView mImage; |
| private TextView mText; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| mHandler = new Handler(); |
| |
| LinearLayout layout = new LinearLayout(this); |
| TextView text = new TextView(this); |
| text.setText("Hello, World!"); |
| Button btn = new Button(this); |
| btn.setText("Screenshot!"); |
| btn.setOnClickListener((v) -> takeScreenshot()); |
| mImage = new ImageView(this); |
| mText = new TextView(this); |
| |
| layout.setOrientation(LinearLayout.VERTICAL); |
| layout.addView(text); |
| layout.addView(btn); |
| layout.addView(mImage); |
| layout.addView(mText); |
| final float density = getResources().getDisplayMetrics().density; |
| layout.setBackground(new Drawable() { |
| Paint mPaint = new Paint(); |
| |
| @Override |
| public void draw(Canvas canvas) { |
| mPaint.setStyle(Style.STROKE); |
| mPaint.setStrokeWidth(4 * density); |
| mPaint.setColor(Color.BLUE); |
| final Rect bounds = getBounds(); |
| canvas.drawRect(bounds, mPaint); |
| mPaint.setColor(Color.RED); |
| canvas.drawLine(bounds.centerX(), 0, bounds.centerX(), bounds.height(), mPaint); |
| mPaint.setColor(Color.GREEN); |
| canvas.drawLine(0, bounds.centerY(), bounds.width(), bounds.centerY(), mPaint); |
| } |
| |
| @Override |
| public void setAlpha(int alpha) { |
| } |
| |
| @Override |
| public void setColorFilter(ColorFilter colorFilter) { |
| } |
| |
| @Override |
| public int getOpacity() { |
| return PixelFormat.TRANSLUCENT; |
| } |
| }); |
| setContentView(layout); |
| } |
| |
| private void takeScreenshot() { |
| View decor = getWindow().getDecorView(); |
| Rect srcRect = new Rect(); |
| decor.getGlobalVisibleRect(srcRect); |
| final Bitmap bitmap = Bitmap.createBitmap( |
| (int) (srcRect.width() * .25), (int) (srcRect.height() * .25), Config.ARGB_8888); |
| PixelCopy.request(getWindow(), srcRect, bitmap, (result) -> { |
| if (result != PixelCopy.SUCCESS) { |
| mText.setText("Copy failed, result: " + result); |
| mImage.setImageBitmap(null); |
| } else { |
| mText.setText(""); |
| mImage.setImageBitmap(bitmap); |
| } |
| }, mHandler); |
| } |
| } |