草庐IT

android - 在Android中调用自定义View的onDraw()方法

我已经为日历创建了一个CustomView。我有一个onDraw方法来在日历中绘制文本。我想在单击它时更改日期文本的颜色。我怎样才能实现它?日历View.java:packagecom.example.calendar_module;importjava.util.Calendar;importandroid.app.ActionBar.LayoutParams;importandroid.content.Context;importandroid.content.res.Resources;importandroid.graphics.Canvas;importandroid.gra

android - 使用 Canvas.drawColor() 清除 Canvas

我正在尝试更改自定义View的背景图片,并取得了一些成功。图像会改变,但问题是我仍然看到旧图像的痕迹。当我尝试在绘制新图像之前清除Canvas时,它似乎不起作用。我创建了一个位图来存储图像。更改图像时,我在绘制新图像之前调用Canvas.drawColor()但旧图像仍然存在。我试过drawColor(0)、drawColor(Color.BLACK)、c.drawColor(0,PorterDuff.Mode.CLEAR),但以上均无效。因此,我不得不发布这篇文章以供比我更有经验的人审阅。实际代码如下:privateintbgnd;privatebooleanswitching;pu

android - View 上的 onDraw() 在布局后面绘制

好的,这就是交易。我想移动扩展图库类中的项目以更改图像的顺序。我现在这样做的方式:长按删除当前选中的项目,使用onDraw()绘制相同的图像,这样我就可以使用onTouchEvent()移动它了在发布时再次添加项目这工作正常,但问题是当使用onDraw()方法时,它会在画廊项目后面绘制图像。有没有办法改变绘制内容的优先级? 最佳答案 好吧,我在进入完全不同的方向后发现了这一点=/对于有同样问题的人,这里是解决方案:在构造函数中(或您初始化组件的任何其他地方)设置setWillNotDraw(false)并覆盖dispatchDraw

android - 如何动画渐变?

如何设置从颜色#1到颜色#2的渐变动画?类似于我打算将它用作单位的生命条(因此,它将是从绿色开始到红色结束的有限动画) 最佳答案 在谷歌搜索时,我发现了两种适用于android的方法:useShaderFactory或使用newShader(newLinearGradient())扩展View。两个答案都是一样的——调用newShader()每次View.onDraw(Canvascanvas)方法的调用。如果此类动画渐变的数量超过~3个,它真的很昂贵。所以我换了一种方式。我避免在每次onDraw()时调用new,使用单个预先计算的

Android View.onDraw() 总是有一个干净的 Canvas

我正在尝试绘制动画。为此,我扩展了View并覆盖了onDraw()方法。我期望的是,每次调用onDraw()时,Canvas都会处于我留下的状态,我可以选择清除它或只绘制它的一部分(这就是我使用SurfaceView时的工作方式)但每次Canvas回来时都已经清除了。有没有办法我不能清除它?或者也许将之前的状态保存到一个位图中,这样我就可以绘制那个位图然后在它上面绘制? 最佳答案 我不确定是否有办法。但是对于我的自定义View,我要么在每次调用onDraw()时重绘所有内容,要么绘制到位图,然后将位图绘制到Canvas上(就像你在问

Android View.onDraw() 总是有一个干净的 Canvas

我正在尝试绘制动画。为此,我扩展了View并覆盖了onDraw()方法。我期望的是,每次调用onDraw()时,Canvas都会处于我留下的状态,我可以选择清除它或只绘制它的一部分(这就是我使用SurfaceView时的工作方式)但每次Canvas回来时都已经清除了。有没有办法我不能清除它?或者也许将之前的状态保存到一个位图中,这样我就可以绘制那个位图然后在它上面绘制? 最佳答案 我不确定是否有办法。但是对于我的自定义View,我要么在每次调用onDraw()时重绘所有内容,要么绘制到位图,然后将位图绘制到Canvas上(就像你在问

android - 我需要在自定义 View 中回调 super.onDraw() 吗?

我不太清楚这一点,文档也不是。当我创建自定义View时,我会这样覆盖:@OverridepublicvoidonDraw(Canvascanvas){super.onDraw(canvas);//morecodehere...}我的问题是是否有必要调用super.onDraw(canvas);。没有它,代码似乎也能正常工作,但我想确保可以不使用它。那么有必要吗? 最佳答案 如果您希望它调用父类(superclass)onDraw方法(想想TextView或KeyboardView而不是通用View),则调用super.onDraw。

android - 我需要在自定义 View 中回调 super.onDraw() 吗?

我不太清楚这一点,文档也不是。当我创建自定义View时,我会这样覆盖:@OverridepublicvoidonDraw(Canvascanvas){super.onDraw(canvas);//morecodehere...}我的问题是是否有必要调用super.onDraw(canvas);。没有它,代码似乎也能正常工作,但我想确保可以不使用它。那么有必要吗? 最佳答案 如果您希望它调用父类(superclass)onDraw方法(想想TextView或KeyboardView而不是通用View),则调用super.onDraw。

android - 在android中查看onDraw(Canvas c)与draw(Canvas c)?

我是android开发新手,我正在探索View。我遇到了已知的两种方法onDraw(Canvasc)和draw(Canvasc)。能否解释一下这两种方法的区别和用法?用图像更新Canvas时,哪种方法会提供更好的性能(FPS)? 最佳答案 它们之间是有区别的onDraw(Canvasc)是一种覆盖方法,在渲染View时会自动调用。在这里,您可以进行额外的绘图,例如画圆、线或任何您想要的。draw(Canvasc)用于手动将此View(及其所有subview)渲染到给定的Canvas。在调用此函数之前,View必须已经完成了完整的布局

android - 在android中查看onDraw(Canvas c)与draw(Canvas c)?

我是android开发新手,我正在探索View。我遇到了已知的两种方法onDraw(Canvasc)和draw(Canvasc)。能否解释一下这两种方法的区别和用法?用图像更新Canvas时,哪种方法会提供更好的性能(FPS)? 最佳答案 它们之间是有区别的onDraw(Canvasc)是一种覆盖方法,在渲染View时会自动调用。在这里,您可以进行额外的绘图,例如画圆、线或任何您想要的。draw(Canvasc)用于手动将此View(及其所有subview)渲染到给定的Canvas。在调用此函数之前,View必须已经完成了完整的布局