标签: android-canvas

Android:在基于画布的视图上启用滚动条

我有一个扩展View的自定义视图.它显示绘制的形状,并允许用户通过onDraw将触摸事件绘制到视图中来添加到这些绘图.

我启用了ScaleGestureDetector,以便用户可以放大特定部分并进行绘制,但是当我使用单点触摸绘制时,他们无法使用手指在放大的视图中平移.

我已经尝试为View启用滚动条,当它们被放大时,滚动条会显示并且可以被用户用来平移...但我根本无法显示滚动条.

本质上,我正在做的是当用户放大时触发awakenScrollBars()我的ScaleListener方法中的View 方法.我通过XML和编程方式启用了滚动条,但是我无法触发滚动条可见.这是我的XML:onScale()invalidate()onCreate()

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.package.name.Canvas
    android:id="@+id/canvas"
    android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:scrollbars="horizontal|vertical" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的onCreate():

// set scrollbars
setHorizontalScrollBarEnabled(true);
setVerticalScrollBarEnabled(true);
Run Code Online (Sandbox Code Playgroud)

在onDraw有,我可以确认的是,滚动条通过启用isHorizontalScrollBarEnabled()isVerticalScrollBarEnabled(),并awakenScrollBars()onScale()返回true,但滚动条只是不可见.

有关如何进行的任何建议?在ScrollView布局中包含自定义视图似乎不是一个选项,因为它只支持垂直滚动.

谢谢,

保罗

android scroll android-canvas

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

android:将canvas转换为位图,然后保存到SD卡

我正在开发一个Android应用程序,我可以在画布上绘制.我想将我的画布转换为位图,然后将其以jpeg格式保存在我的SD卡上.

我怎么能正确地做到这一点?

android android-canvas

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

路径上的文本从4.1.2到4.0.3不起作用

我已经开始研究游戏,当游戏结束时,它会显示一个包含游戏统计数据的棋盘.获胜者的名字是在拱顶上绘制的(使用TextOnPath类,我将在此处粘贴代码).文本在Android 4.1.2中正确显示,但Android 4.0.3或更低版本不会发生同样的事情(我已附加图片向您展示).

我的问题是:我的计划有什么问题?我的min-SDK是8,我没有使用JB中引入的任何新API.请帮我找一个解决方案.

这是我的类(没有显示文本所需的方法):

public class TextOnPath extends View {
    private String winner = "Computer";
    private Path mArc;
    int viewHeight, viewWidth;
    private Paint mPaintText;
    public TextOnPath(Context context) {
        super(context);
    }
    public TextOnPath(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        int offset = 0;
        if (offset < 16)
            offset = (18 - winner.length()) * 11;
        canvas.drawTextOnPath(winner, mArc, offset, 40, mPaintText);

        invalidate();
    }
    @Override
    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) { …
Run Code Online (Sandbox Code Playgroud)

java android text android-canvas

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

如何在画布上优化绘图文本

我有3个圆圈的窗口,它们同时旋转.一切都很好,直到向圆圈添加文本,然后旋转开始滞后.

主窗口

如何在画布上优化绘图?这是我的代码:

@Override
protected void onDraw(final Canvas canvas) {
    if (mPaint == null) {
        mPaint = new Paint();
        mPaint.setTextSize(20f);
    }       
    drawUpperCircle(canvas);
    drawBottomCircle(canvas);
    drawMainCircle(canvas);

    try {
        Thread.sleep(1, 1);
        invalidate();
        mRotation += 0.9;
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    super.onDraw(canvas);
}
   private void drawUpperCircle(Canvas canvas) {
    canvas.save();
    canvas.rotate(mRotation, 0, mUpperCircleCentr);
    mPaint.setColor(Color.CYAN);
    canvas.drawCircle(0, mUpperCircleCentr, mUpperCirclRadius, mPaint);
    mPaint.setColor(Color.BLACK);
    for (int i = 0; i < SEG_COUNT; i++) {
        canvas.rotate(SEG_IN_GRAD, 0, mUpperCircleCentr);
        canvas.drawLine(0, mUpperCircleCentr, mUpperCirclRadius, mUpperCircleCentr, mPaint);
        //          canvas.drawText("my …
Run Code Online (Sandbox Code Playgroud)

android android-canvas

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

如何在Android上触摸事件的曲线上移动图像?

我在画布上绘制了一个Cubic Curve

 myPath.cubicTo(10, 10, w, h/2, 10, h-10);
Run Code Online (Sandbox Code Playgroud)

我在该屏幕上有四个ImageView,当我用触摸拖动图像时,我想在绘制的曲线上移动ImageViews.

我已经提到了这些链接:

在曲线路径上移动图像

在曲线上移动对象

在曲线上移动imageview

我得到的是,动画在曲线上移动图像的持续时间由t定义.但我想仅在该曲线区域的方向上触摸ImageView.

以下是我的屏幕: 在此输入图像描述

所以,我希望所有(x,y) co-ordinates曲线都只在该曲线上移动ImageView.

否则,我想要一个方程式绘制曲线,以便我可以为触摸的y值插入x值.

我已经瞪了很多但没有成功.任何建议或指导都会对我有所帮助.

android android-canvas

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

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

使用填充外边界绘制Rectagle

我正在绘制一个矩形填充外的矩形.我尝试了一些这个.但是不能得到我所期望的完美的.

这就是我的预期.

取景器

我试过了

    Point pTopLeft = new Point();
    Point pBotRight = new Point();
    pTopLeft.x = 100;
    pTopLeft.y = 100;
    pBotRight.x = canvas.getWidth() - 100;
    pBotRight.y = canvas.getHeight() - 100;
    Rect above = new Rect(0, 0, canvas.getWidth(), pTopLeft.y);
    paint.setColor(Color.parseColor("#77000000"));
    canvas.drawRect(above, paint);
    Rect left = new Rect(0, pTopLeft.y, pTopLeft.x, pBotRight.y);
    paint.setColor(Color.parseColor("#77000000"));

    canvas.drawRect(left, paint);
    Rect right = new Rect(pBotRight.x, pTopLeft.y, canvas.getWidth(),
            pBotRight.y);
    paint.setColor(Color.parseColor("#77000000"));
    canvas.drawRect(right, paint);
    Rect bottom = new Rect(0, pBotRight.y, canvas.getWidth(),
            canvas.getHeight());

    paint.setColor(Color.parseColor("#77000000"));
    Paint paint_text = new Paint();
    paint_text.setColor(Color.WHITE);
    paint_text.setTextSize(50);
    paint_text.setTextAlign(Align.CENTER);

    canvas.drawText("Position …
Run Code Online (Sandbox Code Playgroud)

android canvas android-canvas

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

android.graphics.View无效(int,int,int,int)画布的一部分,但onRedraw()整个画布?

Android View有三个版本invalidate():一个使整个视图无效,另外两个只使其中的一部分无效.但它只有一个onDraw(),它绘制整个画布.必须有一些使用系统的提示,我只想让视图的一部分无效,但我不清楚它是什么.

我有一个自定义绘图的视图onDraw().我有办法找出画布的哪些部分无效,所以我只画出那些?

android android-canvas

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

用户移动手指时如何在Android中绘制矩形?

我想画一个矩形。第一个角应该是用户首先触摸屏幕的位置。用户移动手指时,应绘制矩形。这是一个显示视频的链接,我想做什么。但是我不明白,也许您可​​以帮助我。我只想在白色背景上而不是图像上绘制该矩形。

我的代码:

package com.example.androiddrawing;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class CanvasView extends View {

    private Canvas canvas;
    private Paint paint = new Paint();
    private Paint paint2 = new Paint();
    private Paint paint3 = new Paint();
    private Path path = new Path();
    private Point point = new Point();
    private static List<Path> lines = new ArrayList<Path>();
    private static List<Point> points …
Run Code Online (Sandbox Code Playgroud)

java android android-canvas android-drawable

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

view.getDrawingCache()仅在Samsung Galaxy note 8.0中返回null?

**注意:(对于书呆子)请勿将其标记为重复的问题.

  1. 是的,我知道它是什么NullPointerException.
  2. 是的我尝试view.getDrawingCache从Stackoverflow返回null答案.

我正在尝试单独为平板电脑开发绘图应用程序.我创建了一个用于绘图的自定义视图.自定义视图包含在内部ScrollView以使用户滚动图像(如果它太大).

activity_drawing.xml

 <RelativeLayout
            android:id="@+id/container"
            android:layout_marginLeft="@dimen/activity_correction_answer_horizontal_margin"
            android:layout_marginRight="@dimen/activity_correction_answer_horizontal_margin"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <in.com.hourglass.views.ImageScroll   
                android:layout_centerInParent="true"
                android:id="@+id/image_scroll"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <FrameLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">

                    <ImageView
                        android:id="@+id/image"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                    <in.com.hourglass.views.DrawView
                        android:id="@+id/draw_view"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />
                </FrameLayout>
            </in.com.hourglass.views.ImageScroll>
  </RelativeLayout> 
Run Code Online (Sandbox Code Playgroud)

因此,当完成视图上的绘图时,用户可以保存图像并进行思考Canvas.

我正在调整图像大小并将其附加到自定义视图Bitmap,并将它们保存为单个图像.整个过程很好用三星平板电脑10.1.

但是当我尝试在较低屏幕设备samsung Note 8.0中测试相同的时候.view.getDrawingCache()给我一个空的Bitmap.

我已经调试并检查了自定义视图的宽度和高度,它们指定了宽度和高度的scrollview,并且customview中也有一个位图.

Bitmap尽可能地重用以减少app堆内存使用量.

我知道,我必须对此警告采取措施:

W/View: View too large to fit into drawing cache, needs 4380332 bytes, only 4096000 available
Run Code Online (Sandbox Code Playgroud)

错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: …
Run Code Online (Sandbox Code Playgroud)

android bitmap scrollview android-canvas

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