我想画一个透明的圆圈,但它不起作用.
当我绘制位图时,它可以工作,但圆圈不会变得透明.
这是我的简短代码:
Paint paint = new Paint();
paint.setAlpha(125);
canvas.drawBitmap(bitmap, sourceRect, destRect, paint); // this works fine
canvas.drawCircle(x, y, radius, paint); // the circle is drawn but not transparent
Run Code Online (Sandbox Code Playgroud) 我一直在检查使用HierarchyViewer在Android的Gmail应用程序中,发现一些有趣的事情在于,在邮件列表中每个项目看起来像一个画布视图 - 我期待的东西像孩子组件的RelativeLayout:

我最初的原因是它出于性能原因这样做 - 每个项目的一个画布视图比每个项目的多个视图要好得多,特别是在一个似乎滚动非常顺畅的长列表中.这听起来不错吗?Google是否会在其官方文档中的任何位置推荐此方法?这是其他人应该关注性能的方法吗?
我正在开发一个在设备中截取屏幕截图的应用程序.在这个应用程序中,我们可以在屏幕上绘制任何内容.为此,我使用Canvas,Paint和Path来执行此操作.
我正在使用此代码截取屏幕截图:
public void saveScreenshot()
{
if (ensureSDCardAccess())
{
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
onDraw(canvas);
File file = new File(mScreenshotPath + "/" + System.currentTimeMillis() + ".jpg");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
} catch (FileNotFoundException e) {
Log.e("Panel", "FileNotFoundException", e);
} catch (IOException e) {
Log.e("Panel", "IOEception", e);
}
}
}
/**
* Helper method to ensure that the given path exists.
* TODO: check external storage state …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中复制以下内容:

如您所见,它基本上是一个按钮,用于增加/减少其中包含的文本视图的值.此按钮将具有三种视觉状态 - >未按下,减少和增加(如上图所示,用户点击增加箭头,按钮显示在该侧按下)
这是我目前的3个按钮状态:

正如您所看到的,我遇到的问题是能够正确地倾斜/旋转文本视图,使其看起来视觉上正确,并且当按钮增加或减少时,它与按钮一起倾斜.
到目前为止,我尝试了两种不同的方法:
创建一个自定义文本视图类,该类重写onDraw()倾斜画布的方法:
@Override
public void onDraw(Canvas canvas) {
canvas.save();
canvas.skew(0.2f, 0f);
super.onDraw(canvas);
canvas.restore();
}
Run Code Online (Sandbox Code Playgroud)集成Rotate3dAnimation类(源于此处)并使用许多不同的变体来获得所需的结果,例如:
Rotate3dAnimation skew = new Rotate3dAnimation(
30, 0, centerX, centerY, 0, false);
txtAmount.startAnimation(skew);
Run Code Online (Sandbox Code Playgroud)不幸的是,我没有得到完全反映上面第一张图片的结果.我对使用Z轴,倾斜,旋转等设置值感到困惑.
我非常感谢任何有这方面经验的人的帮助.提前致谢
看起来Android真的不喜欢invalidate (Rect dirty),它只用于使画布的一部分无效.当我使画布的一部分无效(在下面以绿色显示)并且画布的ToggleButton 外部需要同时重绘时,以红色显示的整个区域将被删除!似乎Android只是使最小矩形内的所有内容无效,包含需要重绘的两个区域的并集,即使其中一个区域位于View的外部,我的画布也无效.
这是标准行为,如果是这样,为什么有人会使用部分失效?

目前我正在使用paintObject.measureText(textCopy.substring(0,i))迭代TextView文本的副本.例如,measureText("abc".substring(0,1))将给出'b'的相对x坐标.我得到的y坐标layout.getLineTop().这是工作,但不准确的X坐标非等宽字体.我可以稍微校准,但在每个设备上它的工作方式不同.
我能想到的最好的解决方案是覆盖负责在屏幕上绘制TextView的类,并希望获得绘制到屏幕上的每个字符的坐标.
有谁知道我需要覆盖什么类来完成这个?或者其他一些创意解决方案?
我正在使用canvas我的应用程序,我需要画一个圆圈.
为此,我使用了canvas类的drawCicle(cx,cy,radious,paint)方法.
问题是圆的边缘呈像素化.它的椭圆形的kinf.
这是我的代码:
public void drawCircle(){
Paint paint = new Paint();
paint.setColor(Color.rgb(52, 73, 94));
canvas.drawCircle(200, 300, 33, paint);
}
Run Code Online (Sandbox Code Playgroud)

我有一个自定义视图组.在该自定义视图组中有许多自定义视图.自定义视图在布局中彼此重叠.
重叠视图是创建"图层"的必要条件.因此,一个图层可能会创建一些静态内容,但另一个分层视图会创建不同的动画内容.当我从一个视图上的另一个线程调用.postInvalidate时出现问题,该视图基本上是以60FPS运行的动画.在分层视图之外60FPS对于我正在使用的设备(Galaxy S3)是可实现的.
在此自定义视图组中,.invalidate会导致2个硬件渲染视图中的1个无效,并且某些软件视图会使其无效.
MyCustomViewThatShouldNotInvalidate(AbstractDialLayer).onDraw(Canvas) line: 68
MyCustomViewThatShouldNotInvalidate.onDraw(Canvas) line: 79
MyCustomViewThatShouldNotInvalidate(View).draw(Canvas) line: 13650
MyCustomViewThatShouldNotInvalidate(View).draw(Canvas, ViewGroup, long) line: 13534
MyCustomViewGroup(ViewGroup).drawChild(Canvas, View, long) line: 2938
MyCustomViewGroup(ViewGroup).dispatchDraw(Canvas) line: 2808
MyCustomViewGroup(View).buildDrawingCache(boolean) line: 12909
MyCustomViewGroup(View).getDisplayList(DisplayList, boolean) line: 12580
MyCustomViewGroup(View).getDisplayList() line: 12645
RelativeLayout(ViewGroup).dispatchGetDisplayList() line: 2920
RelativeLayout(View).getDisplayList(DisplayList, boolean) line: 12537
RelativeLayout(View).getDisplayList() line: 12645
RelativeLayout(ViewGroup).dispatchGetDisplayList() line: 2920
RelativeLayout(View).getDisplayList(DisplayList, boolean) line: 12537
RelativeLayout(View).getDisplayList() line: 12645
NoSaveStateFrameLayout(ViewGroup).dispatchGetDisplayList() line: 2920
NoSaveStateFrameLayout(View).getDisplayList(DisplayList, boolean) line: 12537
NoSaveStateFrameLayout(View).getDisplayList() line: 12645
ViewPager(ViewGroup).dispatchGetDisplayList() line: 2920
ViewPager(View).getDisplayList(DisplayList, boolean) line: 12537
ViewPager(View).getDisplayList() line: 12645
LinearLayout(ViewGroup).dispatchGetDisplayList() line: 2920
LinearLayout(View).getDisplayList(DisplayList, …Run Code Online (Sandbox Code Playgroud) 我有一个标签云,其中标签有背景颜色.不幸的是,我无法获得行间距.
我们假设这是文本云:
tag1 tag2 tag3
tagtext4 tagtext5
Run Code Online (Sandbox Code Playgroud)
这是文本视图的样式:
<style name="DataEntryValue" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/gray_value</item>
<item name="android:fontFamily">sans-serif-condensed</item>
</style>
Run Code Online (Sandbox Code Playgroud)
BackgroundColorSpan用于为标签设置蓝色背景颜色.然而,线之间没有空间,即两条线的背景颜色没有分开.
当我将文本视图的行间距设置为12sp时,它会添加行间距,但使用标记的背景颜色而不是textview背景颜色来建立行间距.
知道如何使用文本视图背景颜色获得行间距?
更新
使用此解决方案作为指导我想出了这种方法:绘制文本的背景,在顶部和底部用填充绘制文本的背景,绘制文本.因为我之前没有使用过画布,所以可能有更好的方法.无论如何 - 这是代码.
public void draw(Canvas canvas, CharSequence text, int start, int end, float x,
int top, int y, int bottom, Paint paint)
{
float padding;
float right
RectF rect;
right = x + measureText(paint, text, start, end);
padding = 4f;
rect = new RectF( x, top, right, bottom );
paint.setColor( mContext.getResources().getColor(R.color.color1) );
rect = new RectF( x, …Run Code Online (Sandbox Code Playgroud) android string-formatting spacing android-canvas spannablestring
到目前为止,我能够使用一些代码引用表stackoverflow绘制半圆.现在我想把针扎到这个半圆圈.我不知道如何做到这一点.这是Semi circle代码
package in.ashish29agre.stackoverflow.sample.semicircle;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.view.View;
public class MyGraphView extends View {
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private float[] value_degree;
private int[] COLORS = { Color.GREEN, Color.RED, Color.GREEN, Color.RED };
// size of bigger half circle
RectF rectf = null;
// size of smaller half circle
// RectF rectf2 = new RectF(45, 45, 275, 275);
// size of the smallest half circle
// RectF rectf3 = new …Run Code Online (Sandbox Code Playgroud) android ×10
android-canvas ×10
invalidation ×1
listview ×1
paint ×1
path ×1
performance ×1
screenshot ×1
spacing ×1
textview ×1