Articles of android canvas

解决Android中不再支持的Canvas.clipPath()问题

从android 3.0 开始 ,硬件加速开启的设备不再支持clipPath()方法。(阅读本文了解更多详情)。 我正在使用canvas,我需要绘制圆形图像。 关于我该怎么做的任何想法? *我无法关闭硬件加速,我正在寻找其他解决方案。 回答:Tnx @Malcolm的答案。 我发现了一个展示这种技术的好例子,它基本上就是一个面具。

在android中的canvas上旋转图像

我想根据android中的特定角度旋转图像,有些像指南针… 我有这个代码…它适用于drawPath(),但我想用图像替换路径和绘图的东西..我试图创建一个位图图像,DrawBitmapImage,但图像不像路径一样旋转..任何请帮助? public void draw(Canvas canvas) { double angle = calculateAngle(currentLongitude, currentLatitude, targetLongitude, targetLatitude); //Correction; angle-=90; //Correction for azimuth angle-=azimuth; if((getContext() instanceof Activity) && ((Activity)getContext()).getWindowManager().getDefaultDisplay().getOrientation()==Configuration.ORIENTATION_PORTRAIT)angle-=90; while(anglewidth){ top+=(height-width)/2; height=width; } if(width>height){ left+=(width-height)/2; width=height; } float centerwidth = width/2f; float centerheight = height/2f; Paint p = new Paint(); p.setColor(color); p.setStyle(Paint.Style.FILL); p.setAntiAlias(true); float startX = left+(float)(centerwidth+Math.cos(deg2rad(angle))*width/3.0); float startY […]

在浮雕效果的android中绘制圆角边弧

我正在尝试开发一个自定义组件,即弧形滑块,我完成了弧和拇指,但无法弄清楚如何绘制圆角边弧以及其中的浮雕效果。 此刻滑块看起来像这样 绘制弧的代码是 private void drawSlider(Canvas canvas) { float sweepDegrees = (value * arcWidthInAngle) / (maximumValue – minimumValue); // the grey empty part of the circle drawArc(canvas, startAngle, arcWidthInAngle, mTrackColor); // the colored “filled” part of the circle drawArc(canvas, startAngle, sweepDegrees, mFillColor); // the thumb to drag. int radius = ((diameter/2) – (mArcThickness/2)); Point thumbPoint […]

Android:使用文本内部绘制圆圈

我需要在我的片段中绘制三个圆圈,圆圈的大小不同,我指的是这个链接我得到的结果就是这个 这是我的XML代码:UPDATED 但我需要的是这样的 你可以看到圈子必须紧密相连,但是当我使用XML视图时,我无法实现这一点。 我怎么能实现这一点,我需要在我的圈子中使用onClickListeners ,这就是我使用视图的原因 这可以通过Canvas绘图实现,我听说canvas不是视图所以这会限制我给点击听众,如果我错了纠正我 更新: 我通过XML方法满足了我的需求,有没有办法通过canvas绘图实现这一点,我应该发布另一个问题吗?

如何使用animation在Androidcanvas上绘制路径?

我正在制作Android应用程序而且我有一件棘手的事情要做。 我需要在canvas上绘制一条路径,但绘图应该是animation的(即,稍微延迟后逐点绘制)。 是否可以使用Android SDK制作类似的内容? 如果没有,我怎么能产生这种效果?

Android BlurMaskFilter在canvas.drawOval中没有效果,而文本模糊

我一直在尝试创建一个在文本下模糊形状的自定义视图。 问题是BlurMaskFilter对我在canvas上绘制的任何形状都没有影响。 以下是我在构造函数中初始化Paint对象的方法: paint = new Paint(0); paint.setColor(0xffffffff); paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL)); mShadowPaint = new Paint(0); mShadowPaint.setColor(0xff333333); mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL)); 我在onDraw()中调用这样的函数: canvas.drawOval(mShadowBounds,mShadowPaint); canvas.drawText(“hello”, x, y, paint); 但这就是我所看到的。 使用android 4.0 sdk并在4.0.4 galaxy nexus设备(英国)上进行测试。 我想知道这是否是4.0.4中的一个错误,因为我在4.0和4.0.3的模拟器上测试它并且它确实很好地模糊了它们,除非我做错了什么? 编辑:这是在其他平台上测试它的扩展View代码。 import android.content.Context; import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; public class BlurTestView extends View{ private Paint paint; […]

将资源加载到可变位图

我正在从像这样的资源加载位图: Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image); 我想要做的是在我的绘图方法中将它绘制到主canvas之前对位图进行一些更改(因为当它不会改变时在我的主循环中重复大量绘制似乎很浪费)。 我正在使用以下内容对位图进行更改: Canvas c = new Canvas(mBackground); c.drawARGB(…); // etc 所以我自然会得到一个例外 java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor 所以为了避免这种情况,我制作了一个位图副本,以便它是可变的 Bitmap mBackground = BitmapFactory.decodeResource(res,R.drawable.image).copy(Bitmap.Config.ARGB_8888, true); 哪个避免了问题,但它有时会导致OutOfMemoryExceptions,知道任何更好的方法来实现我想要的吗?

PorterduffXfermode:清除位图的一部分

目标只是绘制一个位图,并在其顶部绘制消除位图底层区域的形状。 我创建了简单的概念certificate代码,试图理解我应该如何去做。 在这里的各种线程中,我发现了许多关于使用的提示: android.graphics.PorterDuff.Mode.CLEAR 下面的代码只是创建一个蓝色背景的屏幕,并添加自定义视图。 此视图在其canvas上绘制粉红色背景,位图图像(带有轻微边框以显示粉红色背景),黄色覆盖圆圈表示每个PorterDuffXfermode。 import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuffXfermode; import android.graphics.Paint.Style; import android.graphics.PorterDuff.Mode; import android.graphics.RectF; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.RelativeLayout; public class Test extends Activity { Drawing d = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); RelativeLayout.LayoutParams […]

Android:将canvas绘制到ImageView

我是android编程的新手,我想弄清楚的是这个; 在我的布局中,我有一个TextView,ImageView和Button,所有这些都在垂直方向的LinearLayout上。 我希望能够在ImageView中动态绘制圆圈,而不会干扰我的其余布局(textview / button)。 我正在尝试创建一个canvas,并使用canvas中的drawcircle函数来设置圆的位置。 然后以某种方式将该canvas绘制到我的imageview中。 我不能让这个工作,这有诀窍吗? 或者我的方法根本错了? 如何在不重新创建整个布局的情况下将图形绘制到ImageView? 谢谢!

慢动作与背景图像

我正在为Android做一个小游戏。 当它在白色背景上工作时它工作顺利,但是当我想要放置背景图像时,它变得越来越慢。 首先我尝试将其添加为布局背景图像,但它非常慢,animation是逐帧发生的。 然后我决定在canvas上绘制背景图像作为位图,结果比前一个稍微快一点,但与白色背景相比仍然没什么。 我试图多次缩放图像,我用更高的分辨率,更低的分辨率做了它,但结果没有改变,它仍然更慢。 所以我想问一下,有没有办法在没有失去应用程序的平滑性和速度的情况下为Android应用程序添加背景图像? 谢谢 PS:我在Sony Tablet S上尝试我的应用程序