标签: android-canvas

如何画一个透明的圆圈?

我想画一个透明的圆圈,但它不起作用.

当我绘制位图时,它可以工作,但圆圈不会变得透明.

这是我的简短代码:

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)

android android-canvas

9
推荐指数
1
解决办法
6626
查看次数

为什么Google会在Gmail应用对话列表视图中使用Canvas?

我一直在检查使用HierarchyViewer在Android的Gmail应用程序中,发现一些有趣的事情在于,在邮件列表中每个项目看起来像一个画布视图 - 我期待的东西像孩子组件的RelativeLayout: HierarchyViewer中Gmail对话列表的屏幕截图

我最初的原因是它出于性能原因这样做 - 每个项目的一个画布视图比每个项目的多个视图要好得多,特别是在一个似乎滚动非常顺畅的长列表中.这听起来不错吗?Google是否会在其官方文档中的任何位置推荐此方法?这是其他人应该关注性能的方法吗?

performance android listview android-canvas

9
推荐指数
1
解决办法
367
查看次数

截图

我正在开发一个在设备中截取屏幕截图的应用程序.在这个应用程序中,我们可以在屏幕上绘制任何内容.为此,我使用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)

android screenshot path paint android-canvas

9
推荐指数
1
解决办法
4348
查看次数

在Android中歪曲文本视图

我想在我的应用程序中复制以下内容:

在此输入图像描述

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

这是我目前的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 android-widget android-animation android-canvas

9
推荐指数
1
解决办法
3875
查看次数

Android:无效(脏)

看起来Android真的不喜欢invalidate (Rect dirty),它只用于使画布的一部分无效.当我使画布的一部分无效(在下面以绿色显示)并且画布的ToggleButton 外部需要同时重绘时,以红色显示的整个区域将被删除!似乎Android只是使最小矩形内的所有内容无效,包含需要重绘的两个区域的并集,即使其中一个区域位于View的外部,我的画布也无效.

这是标准行为,如果是这样,为什么有人会使用部分失效?

在此输入图像描述

android invalidation android-canvas

9
推荐指数
2
解决办法
5214
查看次数

在TextView中查找单个Character的精确坐标

目前我正在使用paintObject.measureText(textCopy.substring(0,i))迭代TextView文本的副本.例如,measureText("abc".substring(0,1))将给出'b'的相对x坐标.我得到的y坐标layout.getLineTop().这是工作,但不准确X坐标非等宽字体.我可以稍微校准,但在每个设备上它的工作方式不同.

我能想到的最好的解决方案是覆盖负责在屏幕上绘制TextView的类,并希望获得绘制到屏幕上的每个字符的坐标.

有谁知道我需要覆盖什么类来完成这个?或者其他一些创意解决方案?

android textview android-screen android-canvas

9
推荐指数
2
解决办法
1825
查看次数

画一个边缘光滑的圆圈

我正在使用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)

在此输入图像描述

android android-canvas

9
推荐指数
1
解决办法
4528
查看次数

使1个自定义视图无效会导致视图组中的所有自定义视图失效?

我有一个自定义视图组.在该自定义视图组中有许多自定义视图.自定义视图在布局中彼此重叠.

重叠视图是创建"图层"的必要条件.因此,一个图层可能会创建一些静态内容,但另一个分层视图会创建不同的动画内容.当我从一个视图上的另一个线程调用.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)

android android-custom-view android-layout android-canvas

9
推荐指数
1
解决办法
603
查看次数

具有行间距的Android spannable字符串

我有一个标签云,其中标签有背景颜色.不幸的是,我无法获得行间距.

我们假设这是文本云:

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

9
推荐指数
1
解决办法
3798
查看次数

编辑:Android绘制针图像到这个圆圈类似米仪表

到目前为止,我能够使用一些代码引用表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 android-custom-view android-canvas

9
推荐指数
1
解决办法
2110
查看次数