如何解决从 onTouchEvent 函数获取 Android 中 SurfaceView 的像素
如何在Android中获取SurfaceView的像素
我想扩展SurfaceView的自定义类并覆盖onTouchEvent
private fun getBitmap(): Bitmap {
/*mSurfaceView!!.isDrawingCacheEnabled = true
mSurfaceView!!.buildDrawingCache(true)
val bitmap: Bitmap = Bitmap.createBitmap(mSurfaceView!!.drawingCache)
// mSurfaceView!!.isDrawingCacheEnabled = false
// mSurfaceView!!.destroyDrawingCache()*/
val bitmap =
Bitmap.createBitmap(
mSurfaceView!!.width,mSurfaceView!!.height,Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
mSurfaceView!!.draw(canvas)
return bitmap
}
它总是返回一个黑色位图
解决方法
希望我明白你的意思
class CustomSurfaceView(context: Context?,attrs: AttributeSet?) : SurfaceView(context,attrs) {
override fun onTouchEvent(event: MotionEvent?): Boolean {
var x = event?.getX();
var y = event?.getY();
Log.d("CustomSurfaceView","Pixel($x,$y)");
return super.onTouchEvent(event)
}
}
编辑
此代码将保存最后渲染的位图,因此您可以使用 getPixel
函数。
class CustomSurfaceView(context: Context?,attrs) {
var bitmap: Bitmap? = null;
override fun onTouchEvent(event: MotionEvent?): Boolean {
if(event != null) {
val x = event?.x;
val y = event?.y;
if (bitmap != null) {
val pixel = bitmap?.getPixel(x!!.toInt(),y!!.toInt());
if (pixel != null)
Log.d("CustomSurfaceView","rgb(${Color.red(pixel)},${Color.green(pixel)},${Color.blue(pixel)})");
}
Log.d("CustomSurfaceView",$y)");
}
return super.onTouchEvent(event)
}
override fun draw(canvas: Canvas?) {
if(canvas != null) {
val width = canvas.width;
val height = canvas.height;
bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
if(bitmap != null)
super.draw(Canvas(bitmap!!))
}else {
super.draw(canvas)
}
}
}
要调用 onDraw 函数,您需要在活动中添加以下行:
CustomSurfaceView surfaceView = findViewById(R.id.custom_surface_view);
surfaceView.setWillNotDraw(true);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。