我有一个扩展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应用程序,我可以在画布上绘制.我想将我的画布转换为位图,然后将其以jpeg格式保存在我的SD卡上.
我怎么能正确地做到这一点?
我已经开始研究游戏,当游戏结束时,它会显示一个包含游戏统计数据的棋盘.获胜者的名字是在拱顶上绘制的(使用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) 我有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) 我在画布上绘制了一个Cubic Curve
myPath.cubicTo(10, 10, w, h/2, 10, h-10);
Run Code Online (Sandbox Code Playgroud)
我在该屏幕上有四个ImageView,当我用触摸拖动图像时,我想在绘制的曲线上移动ImageViews.
我已经提到了这些链接:
我得到的是,动画在曲线上移动图像的持续时间由t定义.但我想仅在该曲线区域的方向上触摸ImageView.
以下是我的屏幕: 
所以,我希望所有(x,y) co-ordinates曲线都只在该曲线上移动ImageView.
否则,我想要一个方程式绘制曲线,以便我可以为触摸的y值插入x值.
我已经瞪了很多但没有成功.任何建议或指导都会对我有所帮助.
我需要在瓶子里和装置旋转时渲染Fluid
我正在绘制一个矩形填充外的矩形.我尝试了一些这个.但是不能得到我所期望的完美的.
这就是我的预期.
我试过了
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 View有三个版本invalidate():一个使整个视图无效,另外两个只使其中的一部分无效.但它只有一个onDraw(),它绘制整个画布.必须有一些使用系统的提示,我只想让视图的一部分无效,但我不清楚它是什么.
我有一个自定义绘图的视图onDraw().我有办法找出画布的哪些部分无效,所以我只画出那些?
我想画一个矩形。第一个角应该是用户首先触摸屏幕的位置。用户移动手指时,应绘制矩形。这是一个显示视频的链接,我想做什么。但是我不明白,也许您可以帮助我。我只想在白色背景上而不是图像上绘制该矩形。
我的代码:
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) **注意:(对于书呆子)请勿将其标记为重复的问题.
NullPointerException.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 ×10
android-canvas ×10
java ×2
bitmap ×1
canvas ×1
fluid ×1
graphics2d ×1
scroll ×1
scrollview ×1
text ×1