不少android游戏使用摩讯截图都截出一块黑的图片。
下面解决截图黑屏的问题:
情况一:
图通过Canvas 画在Bitmap 上,再把bitmap放入ImageView中。(这种做游戏的方式很少)
代码如下:
写道
package com.czq.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import com.mobcent.snapshot.share.android.helper.MCShareSnapshotHelper;
public class HelloGraphicsActivity extends Activity {
ImageView img;
Canvas canvas;
Bitmap bitmap;
Paint paint;
int width;
int height;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置全屏,也可以在xml中进行设置 。
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.graphics_activity);
img = (ImageView) findViewById(R.id.img);
// 得到屏幕的宽和高。
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
// 创建图片,用来绘制。
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// 创建画布,并且设置图片用来进行绘制。一个画布可以看成是整个屏幕。
canvas = new Canvas();
canvas.setBitmap(bitmap);
// 设置画笔,的各种属性。
// 可以利用typeface设置外部字体
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
paint.setStyle(Paint.Style.FILL);
// 利用画布直接将内容绘制到bitmap上面。
canvas.drawCircle(50, 50, 30, paint);
// 设定字体和各种格式
Typeface typeface = Typeface.create("test", Typeface.BOLD_ITALIC);
paint.setTypeface(typeface);
paint.setTextSize(25);
canvas.drawText("我是被画出来的!", 100, 50, paint);
// 画线
paint.setColor(Color.GREEN);
canvas.drawLine(0, 0, width, height / 2, paint);
// 画一条路径;Path.moveTo
Path path = new Path();
paint.setColor(Color.BLUE);
// 移动动位置
path.moveTo(150, 150);
// 画线条
path.lineTo(150, 200);
path.lineTo(200, 210);
path.lineTo(30, 30);
canvas.drawPath(path, paint);
// 从哪里开始画一个弧形
path.reset();
path.addCircle(230, 230, 10, Direction.CCW);
canvas.drawPath(path, paint);
// 将画好的图片显示到屏幕上面。
img.setImageBitmap(bitmap);
// 清空笔刷;
paint.reset();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//截图
MCShareSnapshotHelper.takeSnapshot(HelloGraphicsActivity.this, "", "");
} else if (event.getAction() == MotionEvent.ACTION_UP) {
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
}
return true;
}
}
情况二:
继承View 把图画在View上(这种情况也用的不多)
代码如下:
写道
package com.czq.test;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.graphics.Typeface;
import android.view.View;
public class MyView extends View {
Canvas bitcanvas;
Bitmap bitmap;
Paint paint;
int width;
int height;
public MyView(Context context) {
super(context);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// 创建图片,用来绘制。
width = 320;
height = 480;
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// 创建画布,并且设置图片用来进行绘制。一个画布可以看成是整个屏幕。
bitcanvas = new Canvas();
// 在画布上 设置Bitmap
bitcanvas.setBitmap(bitmap);
// 设置画笔,的各种属性。
// 可以利用typeface设置外部字体
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStrokeWidth(10);
paint.setStyle(Paint.Style.FILL);
// 利用画布直接将内容绘制到bitmap上面。
bitcanvas.drawCircle(50, 50, 30, paint);
// 设定字体和各种格式
Typeface typeface = Typeface.create("test", Typeface.BOLD_ITALIC);
paint.setTypeface(typeface);
paint.setTextSize(25);
bitcanvas.drawText("我是被画出来的!", 100, 50, paint);
// 画线
paint.setColor(Color.GREEN);
bitcanvas.drawLine(0, 0, width, height / 2, paint);
// 画一条路径;Path.moveTo
Path path = new Path();
paint.setColor(Color.BLUE);
// 移动动位置
path.moveTo(150, 150);
// 画线条
path.lineTo(150, 200);
path.lineTo(200, 210);
path.lineTo(30, 30);
bitcanvas.drawPath(path, paint);
// 从哪里开始画一个弧形
path.reset();
path.addCircle(230, 230, 10, Direction.CCW);
bitcanvas.drawPath(path, paint);
// 将画好的图片显示到屏幕上面。
// 清空笔刷;
canvas.drawBitmap(bitmap, 0, 0, paint);
paint.reset();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/*
* width = 320; height = 480; bitmap = Bitmap.createBitmap(width,
* height, Bitmap.Config.ARGB_8888); canvas.setBitmap(bitmap);
*/
// canvas.drawBitmap(bitmap, 0, 0, paint);
}
}
package com.czq.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import com.mobcent.snapshot.share.android.helper.MCShareSnapshotHelper;
public class ViewActivity extends Activity{
Canvas canvas;
Bitmap bitmap;
Paint paint;
int width;
int height;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置全屏,也可以在xml中进行设置 。
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new MyView(this));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//截图
MCShareSnapshotHelper.takeSnapshot(ViewActivity.this, "", "");
} else if (event.getAction() == MotionEvent.ACTION_UP) {
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
}
return true;
}
}
情况三: 把图画在自定义的SurfaceView 上(这种情况比较常见,目前大多数android游戏都是这样做)
代码如下:
写道
package com.czq.test;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.animation.Animation;
public class MySurfaceView extends SurfaceView implements Callback, Runnable {// 备注1
private SurfaceHolder sfh;
private Thread th;
private Canvas canvas;
private Paint paint;
private int ScreenW, ScreenH;
private Bitmap mbmpTest;
public MySurfaceView(Context context) {
super(context);
th = new Thread(this);
sfh = this.getHolder();
sfh.addCallback(this); // 备注1
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
this.setKeepScreenOn(true);// 保持屏幕常亮
}
@Override
public void startAnimation(Animation animation) {
super.startAnimation(animation);
}
public void surfaceCreated(SurfaceHolder holder) {
ScreenW = this.getWidth();// 备注2
ScreenH = this.getHeight();
// 创建 画布上的bitmap
mbmpTest = Bitmap.createBitmap(ScreenW, ScreenH, Config.RGB_565);
th.start();
}
private void draw() {
try {
Canvas bitCanvas = new Canvas(mbmpTest); //先把图画在bitmap上
bitCanvas.drawColor(Color.WHITE);
bitCanvas.drawText("hello", 100, 100, paint);
bitCanvas.drawText("这就是简单的一个游戏框架", 100, 130, paint);
canvas = sfh.lockCanvas();
canvas.drawBitmap(mbmpTest, 0, 0, paint); // 再把bitmap 画在当前view的canvas上
} catch (Exception ex) {
} finally { // 备注3
if (canvas != null)
sfh.unlockCanvasAndPost(canvas); // 将画好的画布提交
}
}
public void run() {
while (true) {
draw();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
public Bitmap getMbmpTest() {
return mbmpTest;
}
public void setMbmpTest(Bitmap mbmpTest) {
this.mbmpTest = mbmpTest;
}
}
截图方法:
写道
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import com.mobcent.snapshot.share.android.helper.MCShareSnapshotHelper;
public class SurfaceActivity extends Activity {
/** Called when the activity is first created. */
private MySurfaceView view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
view=new MySurfaceView(this);
setContentView(view);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
MCShareSnapshotHelper.takeSnapshotWithBitmap(SurfaceActivity.this, view.getMbmpTest(), "", "");
} else if (event.getAction() == MotionEvent.ACTION_UP) {
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
}
return true;
}
}
分享到:
相关推荐
Jpeg Encoder ip:支持YCbCr422输入与输出,可编程量化表,Verilog代码实现,适用于FPGA平台仿真,Jpeg Encoder ip:支持YCbCr格式转换,可编程量化,纯Verilog代码易于FPGA移植与VCS仿真应用,Jpeg Encoder ip jpeg编码器: 支持YCbCr422输入,422格式输出 每路数据为8bit 支持可编程量化表 纯verilog代码,方便移植到任何FPGA平台 使用vcs进行仿真 ,Jpeg Encoder IP; YCbCr422输入; 422格式输出; 8bit数据; 可编程量化表; 纯Verilog代码; 方便移植; VCS仿真。,Jpeg编码器:YCbCr422输入输出,可编程量化表,Verilog代码移植性强
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您
使用DeepSeek写的俄罗斯方块小游戏,可以直接用手机浏览器打开进行游戏操作。
MATLAB可以用于开发人脸识别考勤系统。下面是一个简单的示例流程: 1. 数据采集:首先收集员工的人脸图像作为训练数据集。可以要求员工提供多张照片以获得更好的训练效果。 2. 图像预处理:使用MATLAB的图像处理工具对采集到的人脸图像进行预处理,例如灰度化、裁剪、缩放等操作。 3. 特征提取:利用MATLAB的人脸识别工具包,如Face Recognition Toolbox,对处理后的图像提取人脸特征,常用的方法包括主成分分析(PCA)和线性判别分析(LDA)等。 4. 训练模型:使用已提取的人脸特征数据集训练人脸识别模型,可以选择支持向量机(SVM)、卷积神经网络(CNN)等算法。 5. 考勤系统:在员工打卡时,将摄像头捕获的人脸图像输入到训练好的模型中进行识别,匹配员工信息并记录考勤数据。 6. 结果反馈:根据识别结果,可以自动生成考勤报表或者实时显示员工打卡情况。 以上只是一个简单的步骤,实际开发过程中需根据具体需求和系统规模进行定制和优化。MATLAB提供了丰富的图像处理和机器学习工具,是开发人脸识别考勤系统的一个很好选择。
基于Flutter的移动应用开发项目源码
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于Matlab语言实现的设计项目 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计中的部分功能,作为“参考资料”使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具进行解压,没有解压工具的自行百度下载即可。 4、免责声明:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
sketch up 模型,可用于建模前端测试
kettle的linux版本
毕业设计-python blog系统,含源码,亲测可用!
python学生管理系统源码
极光拼音五笔五笔拼音互换
1、文件内容:ibus-table-chinese-scj-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-scj-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持
深入解析:ESC标定开发流程的全方位解读,共计17页详解,ESC标定开发流程的详细介绍:步骤、操作与规范(共17页),ESC标定开发流程,17页 ,ESC标定; 开发流程; 17页,ESC系统标定开发流程详解:17页全面解析
nx api.docx
运行GUI版本,可二开
无刷电机控制技术解析:Sh79f系列芯片驱动BLDC方案,多场景适配中颖科技高效率电动工具与园林设备,无刷电机控制技术解析:Sh79f系列芯片在中颖BLDC方案中的应用,兼容多种电压平台,支持量产阶段的多功能电动工具与园林机械,中颖无刷 BLDC 方案 芯片: Sh79f1611 Sh79f2202A 电压平台: 18V 36V; 状态: 量产阶段; 功能点: ADC方案,堵转失步,转速环电流环,电压电流保护等; 适配: 枪钻 扳手 角磨 等电动工具; 推草机 吹风机 链锯 打草机等园林工具; 提供: 原理图(Pdf) 源代码(未封库); ,关键词: 无刷BLDC;中颖方案;Sh79f1611;Sh79f2202A;18V 36V电压平台;量产阶段;ADC方案;堵转失步;转速环电流环;电压电流保护;适配电动工具;园林工具;原理图;源代码。,中颖无刷BLDC方案:Sh79系列芯片,多电压平台,全功能保护,适配电动与园林工具