标签: android-canvas

canvas中的rotate()无效

当我将canvas方法与canvas对象一起使用时,canvas对象不会旋转.为什么会这样?这是我的代码

package com.example.hello;

    import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout;

    public class CanvasDrawExample extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    setContentView(R.layout.example);
    LinearLayout rl=(LinearLayout)findViewById(R.id.rl);
     rl.addView(new CircleView(this));
    }
public class CircleView extends View
{

    public CircleView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub


    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub


        Paint p=new Paint(Paint.ANTI_ALIAS_FLAG);
        p.setStrokeWidth(100);
        p.setStyle(Paint.Style.STROKE);
        p.setColor(Color.BLUE);

        canvas.drawRect(200, 100, 200, …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-canvas

0
推荐指数
1
解决办法
2301
查看次数

如何在Android中翻转使用源矩形的图像?

我正在使用Canvas.drawBitmap(Bitmap位图,Rect src,Rect dst,Paint paint)绘制图像.我想翻转图像左右移动,但我不能使用这种方法的矩阵.我可以使用canvas.rotate旋转,但这没有用于翻转,任何想法?

android android-canvas

0
推荐指数
1
解决办法
758
查看次数

获取行数StaticLayout会将文本拆分为

我正在画布上绘制一些文本,并且正在使用StaticLayout在屏幕上包装文本。我想对齐文本,以使文本的底部位于屏幕的底部。

为此,我需要知道StaticLayout将文本包装成多少行,因此我可以将其乘以字体大小,并将其与组件的高度偏移很多。

这是我的StaticLayout:

main = new TextPaint();
main.setTextSize(textSize);
main.setColor(Color.WHITE);
bottomText = new StaticLayout("Long text that requires wrapping.", main, getWidth(), Layout.Alignment.ALIGN_CENTER, 1f, 1.0f, false);
Run Code Online (Sandbox Code Playgroud)

我通过翻译画布来向下移动它:

canvas.translate(0, getHeight() / 2);
bottomText.draw(canvas);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)

所以; 如何将其对齐至底部,或获取已拆分成的行数?

layout android android-canvas

0
推荐指数
1
解决办法
1996
查看次数

当我使用drawRect()时,为什么矩形没有显示?

当我在canvas对象上使用drawRect()并且在onCreate方法中声明它时,为什么矩形没有显示.

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activitymain);
    Chronometer stopWatch = (Chronometer)findViewById(R.id.chrono);
    mDrawingActivity = (DrawingActivity)findViewById(R.id.the_canvas);
    Button b = (Button)findViewById(R.id.startButton);
    b.setText("start");
    b.setOnClickListener(this);
}
Run Code Online (Sandbox Code Playgroud)

OnDraw()方法

protected void onDraw(Canvas Square) 
    {
        super.onDraw(Square);
            Paint squareColor = new Paint();
            squareColor.setColor(Color.CYAN); // change the box color to cyan
        Square.drawRect(100,100,100,100, squareColor); 
return;
    }
Run Code Online (Sandbox Code Playgroud)

澄清:即使按钮和计时器也没有显示,程序被强制关闭.

eclipse android android-canvas

0
推荐指数
1
解决办法
2786
查看次数

将HTML5 Canvas.arc移植到Android和逆时针

我正在将Skycons移植到Android上,我的大部分工作都在工作,除了月亮使用Canvas.arc带有逆时针参数的HTML5 .

我试图这样实现:

RectF rect = new RectF();

public void arcR( Path path, float x, float y, float radius, double startAngle, double endAngle, boolean anticlockwise ){
    // Set bounds
    rect.set( x - radius, y - radius, x + radius, y + radius );

    // Convert to degrees
    startAngle = Math.toDegrees(startAngle);
    endAngle = Math.toDegrees(endAngle);

    if(anticlockwise){
        startAngle = 360 - startAngle;
        endAngle = 360 - endAngle;
    }

    endAngle = endAngle - startAngle;

    path.addArc(rect, (float)startAngle, (float)endAngle);
}
Run Code Online (Sandbox Code Playgroud)

我认为我没有正确实施逆时针,因为在我的设备上绘制月球(基于Skycons)看起来像这样:

截图

android drawing android-canvas

0
推荐指数
1
解决办法
1089
查看次数

Android ImageView上的减法滤镜(从图像或视图对象中剪切出羽状椭圆)

我正在试图弄清楚如何在ImageView中"切出一个羽毛孔".

原因是,我正在创建一个教程,我希望整个屏幕变暗.通过放置一个alpha值约为50%的黑色图像,这很容易做到.接下来我想在那个叠加层上切一个洞,这样你就可以更清楚地看到它下面的东西了.我们的目标是突出显示用户点击的按钮和内容,以便他们学习如何操作.

当我之前在ActionScript/Flash中执行此操作时,很容易在屏幕上放置一个暗淡的alpha,然后创建一个圆圈,缩放它的X和Y以匹配我想要突出显示的对象,然后使用它添加一个过滤器它的混合模式设置为SUBTRACT.这个减去圆/椭圆也可以被告知接受鼠标点击,并且这个孔很好用.

在android中,我似乎无法看到如何从视图中减去.我可以看到人们使用滤色器添加到视图或更改颜色.

所以,除非我错过了船,你怎么减去?

graphics user-interface android erase android-canvas

0
推荐指数
1
解决办法
1177
查看次数

如何将画布转换为位图以保存在 sdCard 中

我使用 SurfaceView 在屏幕上移动两个位图图片。我试过这个:

...
@Override
protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);

  ...

  canvas.drawBitmap(bitmap,matrix,paint);
  canvas.drawBitmap(bitmap2,matrix,paint);
}
...
Run Code Online (Sandbox Code Playgroud)

如何像这样将画布保存到 sdCard 中?

public saveCanvasIntoSdCard(Canvas canvas)
{

}
Run Code Online (Sandbox Code Playgroud)

android surfaceview surfaceholder android-canvas android-bitmap

0
推荐指数
1
解决办法
3204
查看次数

在android中用画布绘制四分之一规格?

我怎样才能创建与此相同的仪表?这种规格类型是否存在任何库或专家?我使用帆布作为圆规,但我无法创建这个

 RectF oval = getOval(canvas, 1);
    RectF oval2 = getOval(canvas, 1.1f);

    Paint paint = new Paint();
    paint.setColor(Color.DKGRAY);

    canvas.drawArc(oval2, 180, 90, true, paint);
    canvas.drawArc(oval, 180, 90, true, backgroundPaint);

    RectF innerOval = getOval(canvas, 0.9f);
    canvas.drawArc(innerOval, 180, 90, true, backgroundInnerPaint);

<GaugeView
        android:id="@+id/gauge"
        android:layout_width="@dimen/panel_gauge_height"
        android:layout_height="@dimen/panel_gauge_width"
        app:divisions="8"
        app:scaleEndValue="8"
        app:scaleStartAngle="50"
        app:scaleStartValue="0"
        app:showNeedle="true"
        app:subdivisions="2" />
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

java android gauge android-canvas

0
推荐指数
1
解决办法
2462
查看次数

在onActivityCreated()之前或之后调用onDraw()吗?

我在onCreateView()Fragment中夸大了版面。此布局包含一个自定义视图。现在文档onActivityCreated()说,这是“ 片段的活动已创建时调用这个片段的视图层次实例化 ”。这意味着布局已膨胀,并且布局中的视图之前已创建onActivityCreated()

那么,这是否意味着视图的onLayout()onSizeChanged()onDraw()方法之前调用onActivityCreated()

android ondraw android-fragments android-canvas android-view

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

Android Canvas:创建 RoundRectShape 对象

我为矩形创建了一个类,因为它是我的应用程序中的一个对象。但是现在我希望角落是圆的。在下面你可以看到它是一个简单的骨骼类,用于创建我想要的具有相同属性的任意数量的矩形。

public class customDrawable extends ShapeDrawable {

    public void setCustomDrawableAttributes(ShapeDrawable shapeDrawable){
       int x = 0;
       int y = 0;
       int width = 100;
       int height = 100;
       shapeDrawable.setBounds(x, y-height, x + width,y+height );
   }

   public ShapeDrawable createShape(){
       return new ShapeDrawable(new RectShape());
   }

}
Run Code Online (Sandbox Code Playgroud)

更新:如果没有这种方法,我将无法绘制任何内容,因为没有大小。有了它,它只绘制通常的矩形。(更改为不显示特定于应用程序的方法的整数值)

public void setDrawableAttributes(ShapeDrawable shapeDrawable){
   int x = 0;
   int y = 500
   int width = 200
   int height = 300
   shapeDrawable.setBounds(x, y-height, x + width,y+height );
Run Code Online (Sandbox Code Playgroud)

}

从我的研究中,我发现我不能简单地添加圆角,而是必须创建一个RoundRectShape shapeDrawable. 我使用此方法创建带圆角的矩形的每次尝试都RoundRectShape失败了。不知何故,形状总是最终成为一个没有圆角的规则矩形。

我正在寻找一个简单的骨骼类(就像提供的那个),它创建一个 roundRectShape …

java android android-canvas shapedrawable android-shapedrawable

0
推荐指数
1
解决办法
3329
查看次数