Articles of android canvas

查看外部边界未正确绘制

点击自定义条形图(使用MPAndroidChart创建)后,我正在绘制工具提示。 视图层次结构如下 虽然View位于Chart或其中间兄弟中,但看起来很好。 但是当它与它的兄弟碰撞时,工具提示被截断了 使用HierarchyViewer我可以看到内容存在,但它没有被绘制。 为了得到剪辑,我在draw中使用这个代码 @Override public void draw(Canvas canvas, float posx, float posy) { // take offsets into consideration posx += getXOffset(); posy += getYOffset(); canvas.save(); // translate to the correct position and draw canvas.translate(posx, posy); Rect clipBounds = canvas.getClipBounds(); clipBounds.inset(0, -getHeight()); canvas.clipRect(clipBounds, Region.Op.INTERSECT); draw(canvas); canvas.translate(-posx, -posy); canvas.restore(); } 如果我将Op更改为Region.Op.Replace,则工具提示会正确绘制,但它会替换工具栏内容,而不是在其下滚动。

在扩展/缩小或在android中拖动后获取canvas坐标

我正在开发一个应用程序,我在其中粘贴图像,在canvas上绘图和绘画。 此应用程序还可以向上/向下缩放canvas或将其拖动到不同的位置。 我的问题是:在缩放或拖animation布后,我无法获得正确的canvas坐标。 我想在缩放或拖animation布后绘制手指画,但无法find我触摸的正确位置.. :(我也是新的蜜蜂。这是代码。 @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.save(); //canvas.translate(mPosX, mPosY); canvas.scale(mScaleFactor, mScaleFactor, super.getWidth() * 0.5f, super.getHeight() * 0.5f); mIcon.draw(canvas); for (Path path : listPath) { canvas.drawPath(path, paint); } canvas.restore(); } public TouchExampleView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent ev) { // Let […]

贝塞尔曲线和canvas

如何在canvas中绘制贝塞尔曲线。 我只有起点和终点。 我想从起点到终点画线。 我怎么能这样做?

Android – 如何圆形缩放/放大部分图像?

我试图让用户触摸图像,然后基本上一个圆形放大镜将显示将允许用户更好地选择图像上的某个区域。 当用户释放触摸时,放大的部分将消失。 这用于几个照片编辑应用程序,我正在尝试实现我自己的版本。 我下面的代码确实放大了图像视图的圆形部分,但是一旦我松开手指就不会删除或清除缩放。 我目前使用canvas = new Canvas(bitMap);将一个位图设置为canvascanvas = new Canvas(bitMap); 然后使用takenPhoto.setImageBitmap(bitMap);设置imageview takenPhoto.setImageBitmap(bitMap); 我不确定我是否正确地采取行动。 onTouch代码如下: zoomPos = new PointF(0,0); takenPhoto.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: zoomPos.x = event.getX(); zoomPos.y = event.getY(); matrix.reset(); matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y); shader.setLocalMatrix(matrix); canvas.drawCircle(zoomPos.x, zoomPos.y, 20, shaderPaint); […]

canvas中的图像与触摸事件

看起来很简单,但我在实施方面遇到了问题。 我想要一个包含onTouch事件的屏幕上带有图像的canvas。 我尝试过ImageView但我无法使用canvas。 我已经尝试过SurfaceView并且能够在屏幕上显示canvas,但是运动onTouch事件(缩放,平移)时出现问题。 我需要canvas,因为我将在我的代码中渲染图像。 有人可以告诉我这样做的正确方法吗?

使用方法-canvas.drawBitmap(bitmap,src,dst,paint)

每次我使用这个代码都没有画出来。 我需要在指定的矩形内绘制一个位图。 canvas.drawBitmap(MyBitmap, null, rectangle, null) 我看过网上但找不到多少帮助。

使用Android的RecyclerView时,在刷卡行下添加带有文本/图标的彩色背景

编辑:真正的问题是我的LinearLayout被包装在另一个布局中,这导致了不正确的行为。 Sanvywell接受的答案有一个更好,更完整的例子,说明如何在刷卡视图下绘制颜色,而不是我在问题中提供的代码片段。 现在,在ItemTouchHelper类的帮助下, RecyclerView小部件本身支持行扫描 ,我试图在应用程序中使用它,行的行为与Google的收件箱应用程序类似。 也就是说,向左侧滑动执行一个动作,向右滑动则执行另一个动作。 使用ItemTouchHelper.SimpleCallback的onSwiped方法很容易实现动作本身。 但是,我无法find一种简单的方法来设置应该出现在当前正在刷卡的视图下的颜色和图标(例如在谷歌的收件箱应用程序中)。 要做到这一点,我试图覆盖ItemTouchHelper.SimpleCallback的onChildDraw方法,如下所示: @Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { RecyclerViewAdapter.ViewHolder vh = (RecyclerViewAdapter.ViewHolder) viewHolder; LinearLayout ll = vh.linearLayout; Paint p = new Paint(); if(dX > 0) { p.setARGB(255, 255, 0, 0); } else { p.setARGB(255, 0, 255, […]

在android中创建可绘制和可缩放的图像视图

目标: 创建可绘制和可缩放的imageview, 这意味着当我按下按钮时,它是可绘制的, 或者当我关闭时,这是可缩放的。 *请注意,图纸应与图像视图一起变焦 ================================================== ============= 最近我写了一个像这样的自定义可绘制图像视图: public class DrawView extends ImageView { private int color = Color.BLACK; private float width = 4f; private List holderList = new ArrayList(); private class Holder { Path path; Paint paint; Holder(int color, float width) { path = new Path(); paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(width); paint.setColor(color); paint.setStyle(Paint.Style.STROKE); […]

如何根据设备宽度和字体大小测量TextView高度?

我正在寻找Android中的方法,它将接受输入(text,text_font_size,device_width),并根据这些计算,它将返回显示特定文本所需的高度? 我正在根据他的内容设置文本视图/ webview高度运行时,我知道warp内容但我不能在我的情况下使用,因为一些web视图最小高度问题。 所以我试图计算高度,并根据我设置视图高度。 我试过以下方法 Paint paint = new Paint(); paint.setTextSize(text.length()); Rect bounds = new Rect(); paint.getTextBounds(text, 0, 1, bounds); mTextViewHeight= bounds.height(); 所以输出是 1)“Hello World”返回字体15的高度13 2)“最新版本的Jelly Bean在这里,性能优化”返回字体15的高度16 然后我试过了 Paint paint = new Paint(); paint.setTextSize(15); paint.setTypeface(Typeface.SANS_SERIF); paint.setColor(Color.BLACK); Rect bounds = new Rect(); paint.getTextBounds(text, 0, text.length(), result); Paint.FontMetrics metrics = brush.getFontMetrics(); int totalHeight = (int) (metrics.descent – […]

在Android中平滑地滚animation布

我是Android的新手。 我正在我的视图的OnDraw(Canvascanvas)方法内的Canvas上绘制位图,线条和形状。 我正在寻找有关如何实现平滑滚动以响应用户拖动的帮助。 我搜索过但没有find任何教程来帮助我。 Canvas的引用似乎表明,如果Canvas是从Bitmap(比如说bmpBuffer)构造的,那么在Canvas上绘制的任何内容也会在bmpBuffer上绘制。 是否可以使用bmpBuffer实现滚动…也许可以将其复制回Canvas一次移动几个像素? 但是如果我使用Canvas.drawBitmap将bmpBuffer绘制回Canvas移动了几个像素,那么bmpBuffer会不会被破坏? 因此,也许我应该将bmpBuffer复制到bmpBuffer2然后将bmpBuffer2绘制回Canvas。 一个更简单的方法是将线条,形状等直接绘制到缓冲区中Bitmap然后将该缓冲区(带有移位)绘制到Canvas上,但我可以看到各种方法:drawLine(),drawShape()等等不能用于绘制到Bitmap …仅用于Canvas。 我可以有2幅canvas吗? 其中一个是从缓冲区位图构造的,仅用于绘制线条,形状等,然后将缓冲区位图绘制到另一个Canvas上以便在View中显示? 我应该欢迎任何建议! 这里(以及其他网站上)类似问题的答案是指“blitting”。 我理解这个概念,但在Android文档中找不到关于“blit”或“bitblt”的任何内容。 Canvas.drawBitmap和Bitmap.Copy是Android的等价物吗?