所以我在我的绘图方法中使用下面的代码在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是我从字段中获得的坐标.它们基本上是纬度和经度.结果是一个漂亮的三角形,但内部人员是空的,因此我可以看到地图.有办法以某种方式填补它吗?
我有一个视图,我在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中的着色是作为#FF191919完成的.我的意思是一个8位十六进制数字.但它应该只是一个6位数字.它们有什么关系?如果我想要将6位数字转换为8位数字.怎么做?我的意思是将#424242转换为8位数字着色?请让我知道细节.感谢您的时间和帮助.
我正在使用GestureDetector.SimpleOnGestureListener的onScroll方法在画布上滚动一个大位图.当滚动结束时,我想重绘位图,以防用户想要进一步滚动...离开位图的边缘,但我看不到如何检测滚动何时结束(用户已抬起手指)从屏幕上).
e2.getAction()似乎总是返回值2,所以没有帮助.当压力似乎下降到0.13左右时,e2.getPressure似乎返回相当恒定的值(大约0.25)直到最后的onScroll调用.我想我可以发现这种压力减少,但这远非万无一失.
必须有更好的方法:请有人帮忙吗?
我想用画布绘制圆圈.这是我的代码:
[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)
所以我只有黑色的屏幕没有圆圈.为什么它不起作用?怎么解决?
我想更好地了解Android(2D)Canvas绘图管道的组件如何组合在一起.
例如,XferMode,Shader,MaskFilter和ColorFilter如何交互?这些类的参考文档非常稀疏,Canvas和Paint的文档并没有真正添加任何有用的解释.
我也不完全清楚具有内在颜色的绘图操作(例如: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,混合模式
它没有明确说明,但我猜这里效果的顺序是它们在管道中出现的顺序.
我想要一个带有粗体文本的位图图标在地图上绘制它.我有一个片段在图像上写文字:
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上绘制的文本加粗.
关于使用这些方法时实际发生的情况,文档非常模糊.有人可以解释Matrix实际上如何影响它所设置的位图吗?他们在那里使用了连接这个术语,但是我不清楚这个术语如何应用于坐标数据(之前只用过字符串操作).
我正在尝试在画布上开发一个应用程序,我在画布上绘制一个位图.绘制后,我试图转换为位图图像.
任何人都可以给我一个建议.
先感谢您.
我想canvas使用一定宽度绘制文本.drawtext
例如,400px无论输入文本是什么,文本的宽度应始终为.
如果输入文本较长则会减小字体大小,如果输入文本较短,则会相应地增加字体大小.