blob: a039fba14f6591038198d47004e4ec675f75381a [file] [log] [blame]
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);
}
}