Articles of canvas

电影绘制到canvas时的Android错误信号11

我正在开发一个Android应用程序,我正在尝试显示GIF图像。 为此,我使用Movie类并创建了一个扩展View的类GIFView。 我从Movie.decodeFile方法获取了一个Movie实例。 调用Movie.draw(canvas)时出现错误。 04-28 13:44:18.001: A/libc(24883): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 24883 (mple.channel002) 有相关的代码: public void setGif(File gif) { movie = Movie.decodeFile(gif.getAbsolutePath()); } @Override public void draw(Canvas canvas) { // TODO Auto-generated method stub super.draw(canvas); canvas.drawColor(0xFFCC3C6C); if(movie != null) { if(movieStart == 0) movieStart = android.os.SystemClock.uptimeMillis(); int duration = Math.max(movie.duration(), 1000); […]

canvas上绘制的圆圈与屏幕不匹配

我想在屏幕中心画圆圈,但我得到这样的东西: 我正在使用此代码绘制此圆圈。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444); Canvas c = new Canvas(bmp); RectF rect = new RectF(0,0,width,width); drawCircle(rect, c, width, height); ImageView img = (ImageView) findViewById(R.id.imageView1); img.setImageBitmap(bmp); img.setScaleType(ScaleType.FIT_CENTER); } private void drawCircle(RectF rect, Canvas c, […]

如何在Android上优化Canvas绘图 – drawBitmap?

我已经完成了我的分析,似乎我的大部分时间都花在drawBitmap中,在每一帧上都被称为(理解)。 我使用SurfaceView /更新线程/canvas锁定方法,如LunarLander示例中所示。 但我已经改变了(根据这个问题 ) 在第一帧构造一个位图缓冲区并在其上绘制 绘制每个后续帧,重用该位图(不是我屏幕上的所有内容都会更改) 在每个帧的末尾绘制缓冲区一次到目标canvas(到屏幕) Traceview向我展示了这个drawBitmap在我的800×480设备上每帧需要5ms。 我可以得到更好的东西,还是只是“刻在石头上”的东西,我只需要优化代码的其他部分,以实现每秒好的帧数?

如何在特定坐标上定位自定义对话框?

我是Android开发的菜鸟,我正在试图弄清楚如何在视图中的特定坐标处显示NewQuickAction3Dpopup对话框。 我正在将popup窗口与本教程集成。 基本上,我想使用popup对话框显示用户触摸的数据,而不是使用“infoview”在canvas上绘画。目前,popup窗口显示在我将其锚定到的视图的顶部和中心。 如何让它显示特定的坐标? 任何帮助是极大的赞赏。 我的代码 public void updateMsg(String t_info, float t_x, float t_y, int t_c){ infoView.updateInfo(t_info, t_x, t_y, t_c); //Infoview paints to on a specific coordinate quickAction.show(infoView); //How do I use the t_x & t_y coordinates here instead of just anchoring infoview 编辑 public void updateMsg(String t_info, float t_x, float t_y, int t_c){ infoView.updateInfo(t_info, […]

在Android上的LiveWallpaper中使用布局资源

当您在Android 2.2+中创建LiveWallpaper时,您将获得一个canvas(或任何3D等效物)。 我想使用内置的Android UI工具绘制一些元素,而不是使用canvas命令从头开始构建所有元素或加载预渲染的UI位图。 将单个视图转换为位图工作正常。 即这很好: // For example this works: TextView view = new TextView(ctx); view.layout(0, 0, 200, 100); view.setText(“test”); Bitmap b = Bitmap.createBitmap( 200, 100, Bitmap.Config.ARGB_8888); Canvas tempC = new Canvas(b); view.draw(tempC); c.drawBitmap(b, 200, 100, mPaint); 但是,使用子项转换LinearLayout会导致问题。 你只能得到LinearLayout本身,而不是它的孩子。 例如,如果我将LinearLayout设置为具有白色背景,则会得到一个很好的渲染白色框,但没有一个TextView子项位于Bitmap中。 我也尝试过使用类似结果的DrawingCache。 我正在使用的代码是多维数据集示例,唯一的更改是额外的绘制命令。 LinearLayout可以作为toast或常规视图(即一切都很好地显示),在LiveWallpaper上我得到的是LinearLayout的背景渲染。 inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); layout = (LinearLayout) inflater.inflate(com.example.android.livecubes.R.layout.testLinearLayout, null); layout.layout(0, 0, 400, […]

填充canvas外面的矩形

我想填充canvas上矩形外的区域。 我用 canvas.drawRect(pTopLeft.x, pTopLeft.y, pBotRight.x, pBotRight.y, paint); 绘制矩形,但无法弄清楚如何填充矩形/剪辑外。 谢谢杰夫

画圆角方形

我能够绘制一个锋利边缘的矩形,现在我需要使锋利的边缘变圆。 怎么做? 这是我的代码: public void drawShape(Canvas canvas, Renderer renderer, float x, float y, int seriesIndex, Paint paint) { float halfShapeWidth = shape_width / 2; canvas.drawRect(x , y – halfShapeWidth, x + SHAPE_WIDTH, y + halfShapeWidth, paint); } 如何通过传递相同的参数使这个圆角矩形?

如何识别canvas上绘制的角色

我正在使用手指画画画线,到目前为止我已经提出了以下代码: case MotionEvent.ACTION_MOVE: //return if touch is in this area of canvas if (x<=430 || y=490) return true; //draw path using x and y co-ordinates mPath.quadTo(previousPoint.x, previousPoint.y, (x+previousPoint.x)/2,(y+previousPoint.y)/2); canvas.drawPath(mPath, paint); previousPoint.x = x; previousPoint.y = y; //invalidate canvas on move imageView.invalidate(); break; case MotionEvent.ACTION_UP: Xend=x; Yend=y; //validate that is it true? if((Xstart>=780 && Xstart=780 && […]

结合两个位图并在android中保存为jpg格式?

我在我的项目中有两个位图我需要的是我需要将这两个位图组合并将这些位图组合到单个图像中我将显示我的代码 public class FotosurpriseActivity extends Activity { /** Called when the activity is first created. */ Bitmap overlay; Paint pTouch; int X = -100; int Y = -100; Canvas c2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.android); Bitmap mBitmapover = BitmapFactory.decodeResource(getResources(), R.drawable.ss); overlay = BitmapFactory.decodeResource(getResources(),R.drawable.ss).copy(Config.ARGB_8888, true); c2 […]

我们可以硬件加速屏幕外的canvas吗?

我正在创建一个离屏位图+canvas,将一堆较小的位图绘制到其中,然后将其绘制到视图中。 isHardwareAccelerated()方法为我的canvas返回false: mBitmap = new Bitmap(500, 500, Bitmap.Config.RGB_565); mCanvas = new Canvas(mBitmap); mCanvas.isHardwareAccelerated(); // false 我可以看到我在View的onDraw()方法中给出的canvas是硬件加速的: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.isHardwareAccelerated(); // true // My current approach, but maybe better to draw directly // to the view’s canvas if it’s hardware accelerated? canvas.drawBitmap(mBitmap, …); } 我想知道我们是否可以为屏幕外canvas打开它? 我也想知道我是否应该直接绘制视图的硬件加速canvas,而不是打扰屏幕外的画面,如果它不会加速。 我认为首先将所有内容绘制到屏幕外会更快。 我必须重新组织我的代码来测试它,只是想知道我是否遗漏了屏幕外显示的东西。 谢谢 ——-更新———————————– 我重构了我的绘图代码,直接在onDraw()中直接绘制视图的canvas,而不是使用离屏canvas。 […]