在Android中用手指在触摸屏上绘图时,如何获得平滑曲线而不是圆点或圆圈?我使用以下代码 -
public class DrawView extends View implements OnTouchListener {
private static final String TAG = "DrawView";
List<Point> points = new ArrayList<Point>();
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
}
@Override
public void onDraw(Canvas canvas) {
for (Point point : points) {
canvas.drawCircle(point.x, point.y, 5, paint);
// Log.d(TAG, "Painting: "+point);
}
}
public boolean onTouch(View view, MotionEvent event) {
// if(event.getAction() != MotionEvent.ACTION_DOWN)
// return super.onTouchEvent(event);
Point point = new Point();
point.x …Run Code Online (Sandbox Code Playgroud) 我将hexcode作为#70ffffff用于颜色,我所做的就是canvas.drawline()和paint将颜色设置为该十六进制.
p = new Paint();
p.setColor(R.color.transparentwhite);
p.setStrokeWidth(15);
canvas.drawLine(a.getCenterX(), a.getCenterY(),
a.getPrevious().getCenterX(), a.getPrevious().getCenterY(), p);
Run Code Online (Sandbox Code Playgroud) 我正在研究一种我希望将画布的某些部分用作位图的东西
.在这里,我已附加图像.我想要一个矩形的位图核心(有Stork)
这是我的程序算法.
1:创建一个画布.
2:在画布上画一个颜色选择器.
3:在画布上绘制一个矩形.
现在我想将这个矩形用作位图..
那么有没有办法使用画布捕获位图 ?(我听说Picture类捕获画布,我不知道它与这种情况有关)
.
我正在尝试使用Canvas.drawLine方法绘制多边形
这是我正在使用的代码
Canvas canvas = new Canvas(cache);
Paint paint = new Paint();
paint.setStrokeWidth(16);
paint.setColor(this.currentDrawing.getColor());
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
systemCanvas.drawBitmap(cache, 0, 0, paint);
paint.setStrokeCap(Cap.ROOUND);
canvas.drawLine(from.getLeft(), from.getTop(), to.getLeft(), to.getTop(), paint);
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:

注意线条渲染的方式,它们在圆形形状上打破并且不能平滑地连接.我明白为什么会这样,但我不知道如何使它顺利和一致.
任何帮助表示赞赏.
我试图在画布上写一个半透明的文本.我看到画布上写的字符串,但透明度似乎不起作用.这是我的代码:
public void onDraw(Canvas canvas, Paint paint) {
paint.setAlpha(1);
paint.setAntiAlias(true);
paint.setTextSize(this.textSize);
paint.setColor(textColor);
canvas.drawText(text,x,y,paint);
Logs.add("onDraw DefaultScoreGottenText currentAlpha = " + this.currentAlpha);
showAnimation(null);
}
Run Code Online (Sandbox Code Playgroud)
alpha属性已设置但似乎没有任何效果.我甚至尝试创建一个新的Paint对象并将其发送到drawText方法.也没用.有任何想法吗 ?
我正在尝试使用画布绘制文本.我到处检查过,但这些例子相当复杂,我可以在画布上绘制文字,但它不像这张照片那样显示.

我发现这个代码并且它正常工作,我只需要像上面的图像一样写.
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setTextSize(30);
paint.setAntiAlias(true);
canvas.drawText("There are 137 days, 9 hours 4 minutes and 36 seconds", 150,150, paint);
Run Code Online (Sandbox Code Playgroud) 我一直在网上搜索如何将画布上的内容转换为位图.我尝试了多种方法来实现这一点,例如将绘图缓存保存到位图,但最终结果是背景位图闪烁了一会儿,然后变成了黑屏.测试图像显示在背景上,但不会被下次调用的背景覆盖OnDraw.
MainThreading{
...
if(notuptodate == true){
//call readyBackground to create the background bitmap
this.mainPanel.readyBackground(canvas);
//post the canvas
surfaceHolder.unlockCanvasAndPost(canvas);
//clean the Canvas
canvas = null;
//ready new Canvas
canvas = this.surfaceHolder.lockCanvas();//lock the canvas to enable editing
}//if not true
if (MainThreading.notuptodate == false){
mainPanel.onDraw(canvas);
}//if false
...
}//mainthreading
//this method is run first to create the Bitmap that on draw will use
public void readyBackGround(Canvas canvas){
if (MainThreading.notuptodate){
//method used to draw multiple Bitmaps onto the canvas
renderBackground(canvas);
//private …Run Code Online (Sandbox Code Playgroud) 我必须在地图视图上放置标记并在标记上写一个数字.我已经这样做了,但文本对齐方式因不同分辨率而异.下面是参考代码
float xVal = (float) curScreenCoords.x; // Point curScreenCoords
float yVal = (float) curScreenCoords.y-20; // Point curScreenCoords
Bitmap bitmap = BitmapFactory.decodeResource ( context.getResources() , ( R.drawable.pin_number ) ) ;
canvas.drawBitmap(bitmap, xVal, yVal, getInnerPaint());
public Paint getInnerPaint() {
if (innerPaint == null) {
innerPaint = new Paint();
}
innerPaint.setARGB(255, 117, 161, 220); // blue
innerPaint.setAntiAlias(true);
innerPaint.setStyle(Style.FILL);
return innerPaint;
}
canvas.drawText(String.valueOf(10), xVal+20, yVal+22, getCountPaint()); // 10 is just for example, it can vary to one digit to two to three
public Paint …Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,我有这个函数,通过画布从旧的位图创建一个新的位图.
private static Bitmap convert(Bitmap bitmap, Bitmap.Config config, int width, int height) {
Bitmap convertedBitmap = Bitmap.createBitmap(width, height, config);
Canvas canvas = new Canvas(convertedBitmap);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawBitmap(bitmap, 0, 0, paint);
bitmap.recycle();
return convertedBitmap;
}
Run Code Online (Sandbox Code Playgroud)
问题是当我将旧位图绘制到画布上时,由于旧位图的尺寸大于画布,因此只有位图的左上部分会在画布上绘制.有没有一种方法可以让它在画布上绘制位图时,它会缩放位图,使其完全适合画布?
我不想使用调整位图的大小createScaledBitmap.有更快的方法吗?
或者我可以做,createScaledBitmap但同时让它变得可变吗?这就是我想要做的整体,调整大小并使其同时变得可变.
谢谢
我输入了一个使用Canvas的程序.
它提供了一个弹出菜单,提供3个绘图工具作为选项:
划伤屏幕时画线
根据屏幕上的起点和终点绘制线条
画一个圆圈
此外,还有以下选项:
明确
解开
在线上执行撤消时,根本不存在任何问题,因为两者都基于路径.(用途List<Path>).但是这里开始出现问题.使用Point对象绘制圆.所以问题是:
我希望我很清楚.[Downvoters,如果被吸引,被要求输入原因,以指导这个初学者,一个通常的downvotes受害者,不知道改进的确切原因].
下面分享的代码(很复杂).我尝试将一个类专门用于每个绘图工具(直线,圆) - 它工作 - 除了 - 它没有在画布上绘制任何东西.所以,所有人都回来了.
码:
package com.example.orbit_.undofortouch;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
Button b1, b2, b3;
PopupMenu …Run Code Online (Sandbox Code Playgroud) android ×10
android-canvas ×10
draw ×5
bitmap ×2
paint ×2
android-view ×1
animation ×1
graphics ×1
line ×1
transparent ×1
undo ×1