Tag: android canvas

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

从android 3.0 开始 ,硬件加速的设备不再支持clipPath()方法。(阅读这篇文章的更多细节)。 我正在使用canvas,我需要绘制圆形的图像。 任何想法,我怎么能做到这一点? *我无法closures硬件加速,我正在寻找其他解决scheme。 回答:Tnx @Malcolm为您的答案。 我find了一个很好的例子来certificate这个技巧 ,它基本上是一个面具。

如何在canvas上的两点之间绘制弧?

我有两个点在canvas上,现在我可以通过使用下面的图像之间的这些点之间画一条线 这个代码canvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint); 我想绘制像下面的图像两点之间的弧。 我怎么画这个

SurfaceView在加载时闪烁黑色

我有一个绘图应用程序需要大约2-5秒来加载绘图复杂的图纸(通过一个AsyncTask完成)。 为了获得更好的用户体验,在此期间,我将存储的PNG版本的graphics从应用程序目录中作为ImageView刷新,并在Activity构造函数中显示调用setContentView()的加载ProgressBar : <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/flash" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@color/note_bg_white" android:contentDescription="@string/content_desc_flash_img" android:focusable="false" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="6dp" android:paddingLeft="6dp" android:paddingRight="6dp" android:gravity="bottom|center_vertical"> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:id="@+id/toolbar_progress" android:layout_width="match_parent" android:layout_height="18dp" android:gravity="bottom|center_vertical" /> </RelativeLayout> </FrameLayout> 当AsyncTask完成后,我再用新的布局调用setContentView() : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <com.my.package.DrawingCanvas android:id="@+id/canvas" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:background="#ffffff" /> </RelativeLayout> 当我使用一个简单的Canvas模型时,这个工作是完美的,因为自定义的DrawingCanvas View会在显示给用户之前将绘图绘制到初始的onDraw()的屏幕上,但是现在使用带有绘制循环的SurfaceView看到闪烁的布局,然后当图纸被加载,黑屏大约一秒钟,然后最后新的DrawingCanvas。 […]

了解canvas和表面的概念

我正在努力了解绘制到SurfaceView的过程,因此也了解Android中使用的整个Surface / Canvas / Bitmap系统。 我已经阅读了所有的文章和API文档页面,我可以在Android开发人员网站上find,几个Androidgraphics教程,LunarLander源代码和这个问题 。 请告诉我,这些陈述中的哪些是真实的,哪些不是,为什么。 Canvas有它自己的Bitmap附加到它。 Surface有自己的Canvas连接到它。 窗口的所有View共享相同的Surface并共享相同的Canvas 。 SurfaceView是View的子类,与其他View的子类和View本身不同,它有自己的Surface来绘制。 还有一个问题: 为什么需要一个Surface类,如果已经有一个Canvas用于高层次的位图操作的话。 举一个Canvas不适合做Surface工作的例子。

在Android中的canvas上旋转图像

我想在Android中根据特定的angular度旋转图像,有些东西像指南针… 我有这个代码…它工作在drawPath(),但我想要replace的path和绘图的东西与图像..我试图创build一个位图图像,DrawBitmapImage,但图像不旋转像path..任何请帮助? 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(angle<0)angle=angle+360; Rect rect = canvas.getClipBounds(); int height = rect.bottom-rect.top; int width = rect.right-rect.left; int left = rect.left; int top = rect.top; if(height>width){ top+=(height-width)/2; height=width; } if(width>height){ left+=(width-height)/2; width=height; } float […]

Android:如何检测滚动何时结束

我正在使用GestureDetector.SimpleOnGestureListener的onScroll方法在canvas上滚动一个大的位图。 当滚动结束时,我想重绘位图,以防用户想要进一步滚动…离开位图的边缘,但是我看不到如何检测滚动何时结束(用户已经提起了他的手指从屏幕上)。 e2.getAction()似乎总是返回值2,所以没有帮助。 e2.getPressure似乎返回相当不变的值(大约0.25),直到最后的onScroll调用时,压力似乎下降到大约0.13。 我想我可以察觉到这种压力的减less,但这远非万无一失。 一定有更好的办法:请谁能帮忙?

如何在Androidcanvas中绘制一个实心的三angular形?

所以我使用下面的代码在我的绘图方法中绘制了android地图中的这个三angular形: paint.setARGB(255, 153, 29, 29); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setAntiAlias(true); Path path = new Path(); path.moveTo(point1_returned.x, point1_returned.y); path.lineTo(point2_returned.x, point2_returned.y); path.moveTo(point2_returned.x, point2_returned.y); path.lineTo(point3_returned.x, point3_returned.y); path.moveTo(point3_returned.x, point3_returned.y); path.lineTo(point1_returned.x, point1_returned.y); path.close(); canvas.drawPath(path, paint); pointX_returned是我从字段中获得的坐标。 他们基本上是纬度和经度。 结果是一个很好的三angular形,但内幕是空的,所以我可以看到地图。 有办法填补它以某种方式?

Androidcanvas:在图像上绘制透明的圆圈

我正在创build一个像素狩猎游戏。 所以我的活动显示一个ImageView。 我想创build一个提示“告诉我在哪里是对象”。 为此,我需要模糊整个图像,除了围绕对象所在点的圆。 我可以显示一个半透明的黑色背景,而不是模糊。 在canvas上绘制半透明的矩形是没有问题的。 但是我不知道如何从中挖出一个透明的圆圈。 结果应该是这样的: 请帮助我在Android SDK上获得相同的结果。

Android,canvas:如何清除(删除内容)一个canvas(=位图),生活在一个surfaceView?

为了制作一个简单的游戏,我使用了一个模板来绘制一个像这样的位图的canvas: private void doDraw(Canvas canvas) { for (int i=0;i<8;i++) for (int j=0;j<9;j++) for (int k=0;k<7;k++) { canvas.drawBitmap(mBits[allBits[i][j][k]], i*50 -k*7, j*50 -k*7, null); } } (canvas在“run()”中定义/ SurfaceView存在于GameThread中。) 我的第一个问题是如何清除(或重绘) 整个canvas以获得新的布局? 其次,我怎样才能更新屏幕的一部分? // This is the routine that calls "doDraw": public void run() { while (mRun) { Canvas c = null; try { c = mSurfaceHolder.lockCanvas(null); synchronized (mSurfaceHolder) […]

通过手指,Android在canvas中绘制

我需要build立一个手指画在canvas上的项目, 获取手指的触摸事件和运动事件,然后绘制。 任何人都可以告诉我如何开始项目, 什么是最好的组成部分做这样的事情?