草庐IT

java - 如何在SurfaceView中使用android软键盘

我有一个可以在其上绘制的SurfaceView,没有控件、文本框或任何其他类型的表单类型的项目。我希望能够:1:触摸我在SurfaceViewonDraw()方法上绘制的圆圈之一,打开默认的android软键盘。(我知道如何做触摸检测部分,只需要以某种方式打开软键盘)2:当我输入时,我希望我选择的字母显示在Canvas上(同样我知道如何进行绘图部分,但我如何捕获用户首先选择的键?)很多坦克大卫 最佳答案 你可以试试这个来显示键盘:InputMethodManagerimm=(InputMethodManager)getSystemS

Android canvas - 画一个洞

Android中是否可以用canvas实现如下图片?我想在黄色的红色层上有一个洞,而不仅仅是一个圆圈。我在我的onDraw()-Method中尝试了以下代码(但失败了):canvas.drawBitmap(yellow,0,0,paint);canvas.drawBitmap(red,0,200,paint);Paintp=newPaint();p.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.CLEAR));canvas.drawCircle(300,300,radius,p);但是当我使用这段代码时,它在两个位图上都打了一个洞。

android - 我应该如何每秒调用 Android View 的 onDraw() 方法 30 次

对于Android,我有一个自定义View,我在onDraw()方法中用原始形状填充它。来自Processing背景,我希望draw方法每秒自动调用30次,但很明显这不是androidView的工作方式。那么我应该如何每秒调用此方法30次? 最佳答案 使用Animation,并调用startAnimation()从您的View中查看它。我不知道您是否可以设置目标帧率——相反,您应该及时设置开始和结束点,并能够在两者之间的任何时间点进行插值。如果您不喜欢这种方法,您可以考虑让另一个线程定期调用view.postInvalidate()

android - 在 Android 上创建无延迟的 2D 游戏循环

我花了一些时间学习如何在Androidanno2016上创建2D渲染游戏循环。我想实现以下目标:流畅的动画硬件加速无延迟(60帧/秒)使用正常Canvas简单(无OpenGL)关于SurfaceView的神话:首先有几个帖子推荐SurfaceView.乍一看,这似乎是个好主意,因为它使用了单独的渲染线程,但事实证明,从SurfaceHolder返回的Canvas不能是hardwareaccelerated。!!在具有QuadHD(2560x1440)分辨率的设备上使用带有软件渲染的SurfaceView效率极低。因此我的选择是扩展一个基本View并覆盖onDraw()。为每次更新调用i

Android onDraw() 在所有 View 上执行?

这里有一个奇怪的行为,我不了解自定义View。我在框架布局中有两个View,一个在另一个之上。这些View很简单,我制作它们只是为了进行一个简短的测试publicclassView1extendsView{....@OverridepublicbooleanonTouchEvent(MotionEventevent){if(event.getAction()==MotionEvent.ACTION_DOWN){this.updateDrawings();}returntrue;}@OverrideprotectedvoidonDraw(Canvascanvas){super.onDra

android - 如何在 Android 中的矩形内剪切圆形路径

我已经阅读了20多个问题/答案,但我仍然无法得到我想要的。我想在矩形内切一个圆,如下所示:这是我的代码:@OverrideprotectedvoidonDraw(Canvascanvas){Paintpaint=newPaint();paint.setStyle(Paint.Style.FILL);paint.setARGB(180,0,0,0);canvas.drawRect(0,0,getWidth(),getHeight(),paint);PathcircularPath=newPath();circularPath.addCircle(getWidth()/2,getHeigh

android - Canvas 以黑色显示位图的透明部分 - Android

在我的android应用程序中,我想绘制两个图像-img1和img2。首先,我将在Canvas上绘制img2。之后,我将在Canvas上绘制img1,它将与img2重叠。Img1包含透明部分。问题是,img1的透明部分显示为黑色,但我希望img2通过img1的透明部分可见。我做不到。请帮我解决这个问题。谢谢。代码:protectedvoidonDraw(Canvascanvas){super.onDraw(canvas);Bitmapb=BitmapFactory.decodeResource(getResources(),R.drawable.white_bg);//img2canv

java - 是什么导致调用 View 的 OnDraw 方法以及何时

我在android的Textview类中看到了这个:@OverrideprotectedvoidonDraw(Canvascanvas){restartMarqueeIfNeeded();//Drawthebackgroundforthisviewsuper.onDraw(canvas);在android的View类中,我看到它是空的:/***Implementthistodoyourdrawing.**@paramcanvasthecanvasonwhichthebackgroundwillbedrawn*/protectedvoidonDraw(Canvascanvas){}如果它

android - ArrayList的高效onDraw

我有一个自定义View,我在上面绘制了一个坐标数组列表(这是一个自定义类,只包含一个x和y位置)。随着越来越多的Coordinates添加到ArrayList,绘图速度明显变慢。我想知道是否有一种更有效的方法来绘制此ArrayList,或者我是否可以只添加一个已添加的坐标(因为ArrayList仅在无效调用之间更改一个坐标)。相关代码如下:publicclassCustomDrawextendsView{//membervariablespublicvoidupdateLine(){//grabnewcoordinatesforeachmeasureif(measure1.isEmpt

Android:如何在 onDraw() 中获取位图的缩放宽度

简单的问题,简单的答案不起作用。我有一个位图,我想在onDraw()方法中获取系统针对不同DPI屏幕缩放到显示的尺寸。bitmap.width()成功返回其未缩放的宽度。但是,bitmap.getScaledWidth()返回零。我试过getScaledWidth(canvas)和getScaledWidth(canvas.getDensity()),但都返回0。事实上,canvas.getDensity()返回零,所以我什至无法手动计算它。我做错了什么?再详细一点。我正在使用自定义View。位图在类中声明并在构造函数中加载。编辑:我发现使用:DisplayMetricsmetrics