标签: android-canvas

如何在Android画布中绘制一个填充三角形?

所以我在我的绘图方法中使用下面的代码在android地图中绘制这个三角形:

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);
Run Code Online (Sandbox Code Playgroud)

pointX_returned是我从字段中获得的坐标.它们基本上是纬度和经度.结果是一个漂亮的三角形,但内部人员是空的,因此我可以看到地图.有办法以某种方式填补它吗?

java android google-maps android-canvas

83
推荐指数
6
解决办法
9万
查看次数

Android Canvas.drawText

我有一个视图,我在onDraw(Canvas画布)方法中使用Canvas对象进行绘制.我的代码是:

Paint paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
canvas.drawPaint(paint);

paint.setColor(android.R.color.black);
paint.setTextSize(20);
canvas.drawText("Some Text", 10, 25, paint);
Run Code Online (Sandbox Code Playgroud)

问题是文字没有透过背景显示,我做错了什么?如果我删除canvas.drawPaint(paint)和paint.setColor(android.R.color.black),你可以看到屏幕上的文字......

android drawtext android-canvas

80
推荐指数
2
解决办法
17万
查看次数

Android中的Hex Colors有8倍数字.怎么样?#FFFFFF和#FFFFFF00之间有什么区别?

我有时在示例中看到Android中的着色是作为#FF191919完成的.我的意思是一个8位十六进制数字.但它应该只是一个6位数字.它们有什么关系?如果我想要将6位数字转换为8位数字.怎么做?我的意思是将#424242转换为8位数字着色?请让我知道细节.感谢您的时间和帮助.

android hex colors android-layout android-canvas

76
推荐指数
5
解决办法
6万
查看次数

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

我正在使用GestureDetector.SimpleOnGestureListener的onScroll方法在画布上滚动一个大位图.当滚动结束时,我想重绘位图,以防用户想要进一步滚动...离开位图的边缘,但我看不到如何检测滚动何时结束(用户已抬起手指)从屏幕上).

e2.getAction()似乎总是返回值2,所以没有帮助.当压力似乎下降到0.13左右时,e2.getPressure似乎返回相当恒定的值(大约0.25)直到最后的onScroll调用.我想我可以发现这种压力减少,但这远非万无一失.

必须有更好的方法:请有人帮忙吗?

android smooth-scrolling android-canvas

65
推荐指数
1
解决办法
5万
查看次数

如何在Android中用画布绘制圆圈?

我想用画布绘制圆圈.这是我的代码:

[MyActivity.java]:

public class MyActivity extends Activity 
{
 public void onCreate(Bundle savedInstanceState) 
   {
      ...
      setContentView(new View(this,w,h));
   }

}
Run Code Online (Sandbox Code Playgroud)

[View.java]:

public class View extends SurfaceView
{
    public View(Context context, int w, int h)
    {
        super(context);
        Canvas grid = new Canvas(Bitmap.createBitmap(h,w, Bitmap.Config.ARGB_8888));
        grid. drawColor(Color.WHITE);
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        grid.drawCircle(w/2, h/2 , w/2, paint);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我只有黑色的屏幕没有圆圈.为什么它不起作用?怎么解决?

java android android-canvas

64
推荐指数
4
解决办法
19万
查看次数

Android(2D)Canvas绘图管道的各个部分如何组合在一起?

我想更好地了解Android(2D)Canvas绘图管道的组件如何组合在一起.

例如,XferMode,Shader,MaskFilterColorFilter如何交互?这些类的参考文档非常稀疏,CanvasPaint的文档并没有真正添加任何有用的解释.

我也不完全清楚具有内在颜色的绘图操作(例如:drawBitmap与"矢量"原语相比drawRect)是否适合所有这些 - 他们总是忽略Paint颜色并使用其内在颜色吗?

我也很惊讶,人们可以这样做:

Paint eraser = new Paint();
eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawOval(rectF, eraser);
Run Code Online (Sandbox Code Playgroud)

这抹去了椭圆形.在我注意到这一点之前,我的心理模型是绘制到画布(概念上)绘制到单独的"图层",然后使用Paint的传输模式使用Canvas的位图组合该图层.如果它那么简单那么上面的代码将擦除整个位图(在剪辑区域内),因为CLEAR 总是将颜色(和alpha)设置为0,而不管源的alpha是什么.所以这意味着还有一种额外的掩蔽来限制擦除到椭圆形.

我确实找到了API演示,但是每个演示都"在真空中"工作,并没有显示它关注的东西(例如:XferModes)如何与其他东西(例如:ColorFilters)交互.

有了足够的时间和精力,我可以凭经验弄清楚这些部分是如何相关或破译源的,但我希望其他人已经解决了这个问题,或者更好的是,有一些管道/绘图模型的实际文档,我错过了.

这个问题的灵感来自于在另一个SO问题的答案中看到代码.

更新

在寻找一些文档的同时,我想到,由于我在这里感兴趣的东西似乎是一个非常薄的贴面,在skia之上,也许有一些skia文档会有所帮助.我能找到的最好的东西是文件SkPaint说:

可以为paint分配6种效果:

  • SkPathEffect - 在生成alpha蒙版(例如,破折号)之前对几何(路径)的修改
  • SkRasterizer - 组成自定义遮罩层(例如阴影)
  • SkMaskFilter - 在对alpha蒙版进行着色和绘制之前对其进行修改(例如模糊,浮雕)
  • SkShader - 例如渐变(线性,径向,扫描),位图图案(钳位,重复,镜像)
  • SkColorFilter - 在应用xfermode之前修改源颜色(例如颜色矩阵)
  • SkXfermode - 例如porter-duff transfermodes,混合模式

它没有明确说明,但我猜这里效果的顺序是它们在管道中出现的顺序.

android skia android-canvas

60
推荐指数
2
解决办法
1万
查看次数

如何在位图上绘制粗体文字?

我想要一个带有粗体文本的位图图标在地图上绘制它.我有一个片段在图像上写文字:

Bitmap icon = BitmapFactory.decodeResource(PropertyMapList.this.getResources(),
        R.drawable.location_mark);
TextPaint paint = new TextPaint();
paint.setColor(Color.BLACK);
paint.setTextSize(14);
paint.setFakeBoldText(true);
//paint.setTextAlign(Align.CENTER);
Bitmap copy = icon.copy(Bitmap.Config.ARGB_8888, true); 
Canvas canvas = new Canvas(copy);
//canvas.drawText(jsonObj.getString("district_name"), 5, canvas.getHeight()/2, paint);
String districtName = jsonObj.getString("district_name");
StaticLayout layout = new StaticLayout((districtName.length()>25 ? districtName.substring(0, 24)+"..":districtName)+"\n"+jsonObj.getString("total_properties"), paint, canvas.getWidth()-10,Layout.Alignment.ALIGN_CENTER, 1.3f, 0, false);
canvas.translate(5, canvas.getHeight()/2); //position the text
layout.draw(canvas);
Run Code Online (Sandbox Code Playgroud)

setFakeBoldText(true)不适合我.我希望Bitmap上绘制的文本加粗.

android paint bitmap android-canvas

59
推荐指数
2
解决办法
3万
查看次数

寻找post/pre/set Translate(在Matrix对象中)以及如何使用它们的解释

关于使用这些方法时实际发生的情况,文档非常模糊.有人可以解释Matrix实际上如何影响它所设置的位图吗?他们在那里使用了连接这个术语,但是我不清楚这个术语如何应用于坐标数据(之前只用过字符串操作).

android bitmap matrix android-canvas

58
推荐指数
1
解决办法
2万
查看次数

将画布转换为android中的位图图像

我正在尝试在画布上开发一个应用程序,我在画布上绘制一个位图.绘制后,我试图转换为位图图像.

任何人都可以给我一个建议.

先感谢您.

android bitmap android-canvas

50
推荐指数
2
解决办法
8万
查看次数

android canvas drawText从宽度设置字体大小?

我想canvas使用一定宽度绘制文本.drawtext

例如,400px无论输入文本是什么,文本的宽度应始终为.

如果输入文本较长则会减小字体大小,如果输入文本较短,则会相应地增加字体大小.

java android android-canvas

50
推荐指数
3
解决办法
6万
查看次数