这是我的代码;
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
){
Canvas(
modifier = Modifier
.fillMaxSize(0.5f)
.border(1.dp, Color.Red)
){
drawRect(
color =Color.Black,
size = size,
style = Stroke(
width = 100f
)
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果;
我希望厚度从红线的内侧或外侧增加,而不是两侧。我怎样才能做到这一点?
android-canvas kotlin android-jetpack-compose android-jetpack-compose-canvas
假设我在下面编写了以下代码。
背景洋红色圆圈,顶部有默认黑色的文本。
当文本颜色位于圆圈上方时,我想将其混合为白色。
Canvas(
modifier = Modifier.size(256.dp),
onDraw = {
drawCircle(
color = Color.Magenta,
radius = 50f,
center = Offset(
x = size.width / 2,
y = size.height / 2),
)
val textSize = textMeasurer.measure(text = AnnotatedString("A"))
drawText(
textMeasurer = textMeasurer,
text = "A",
style = TextStyle(
color = Color.Black,
fontSize = 14.sp
),
topLeft = Offset(
x = size.width / 2 - 100f - (textSize.size.width / 2),
y = size.height / 2 - (textSize.size.height / 2)
)
)
drawText( …Run Code Online (Sandbox Code Playgroud) android android-canvas android-jetpack-compose android-jetpack-compose-canvas
我使用 path.cubicTo() 方法画了一颗心
Canvas(modifier = Modifier.size(100.dp)) {
val path = Path()
path.moveTo(0f, size.height / 3)
path.cubicTo(0f, 0f, size.width / 2, 0f, size.width / 2, size.height / 3)
path.cubicTo(size.width / 2, 0f, size.width, 0f, size.width, size.height / 3)
path.cubicTo(
size.width,
size.height * 2 / 3,
size.width / 2,
size.height,
size.width / 2,
size.height
)
path.cubicTo(
0f,
size.height * 2 / 3,
0f,
size.height / 2,
0f,
size.height / 3
)
drawPath(color = Color.Red, path = path, style = Stroke(5f))
}
Run Code Online (Sandbox Code Playgroud)
animation android android-canvas android-jetpack-compose android-jetpack-compose-canvas
我想在画布中创建一个包含大位图(大于屏幕)的视图.这样用户就可以Bitmap在其上滚动和绘制手指画.我正在关注FingerPaintAndroid API演示中的代码.
但我不能够产生滚动Bitmap使用Canvas.增加位图的大小似乎不起作用.
我尝试在视图中添加视图类,ScrollView但视图onDraw()没有被调用,我得到一个空白屏幕.
请帮我解决一下这个.谢谢.
我有一个获取图像视图坐标的代码,我想在用户在imageview中触摸2次时绘制一条线.imageview有一个drawable的位图.更多细节这是我的代码:
public class MainActivity extends Activity implements OnTouchListener {
ImageView tampil;
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
private static final String TAG = "Touch";
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
// Remember some things for zooming
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
float x1, y1, x2, y2;
Bitmap bmp;
int i = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个自定义视图 - 手指画,我遇到此错误的麻烦,我不知道如何解决它.谁能告诉我有什么问题?
logcat的:
08-04 08:34:01.171: E/AndroidRuntime(15664): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.boenka.mk/com.boenka.mk.Draw}: android.view.InflateException: Binary XML file line #9: Error inflating class com.boenka.mk.DrawPanel
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.os.Looper.loop(Looper.java:137)
08-04 08:34:01.171: E/AndroidRuntime(15664): at android.app.ActivityThread.main(ActivityThread.java:4424)
08-04 08:34:01.171: E/AndroidRuntime(15664): at java.lang.reflect.Method.invokeNative(Native Method)
08-04 08:34:01.171: E/AndroidRuntime(15664): at java.lang.reflect.Method.invoke(Method.java:511)
08-04 08:34:01.171: E/AndroidRuntime(15664): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-04 08:34:01.171: E/AndroidRuntime(15664): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-04 …Run Code Online (Sandbox Code Playgroud) android android-custom-view android-inflate android-canvas android-view
我有以下CustomView我在我的应用程序中使用绘画:
package com.test.testing;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.widget.TextView;
public class CustomView extends TextView {
Paint paint;
Path path;
float x = 0;
float y = 0;
private int cWhite = Color.WHITE;
public CustomView(Context context) {
super(context);
paint = new Paint();
path= new Path();
paint.setAlpha(255);
paint.setColor(cWhite);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(20);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path,paint);
canvas.drawCircle(x, y, 10, paint);
}
public boolean onTouchEvent(MotionEvent event) {
int action …Run Code Online (Sandbox Code Playgroud) 我正在创建一个自定义视图,用户可以在其中选择一个角度.以下是最终结果应如下所示的示例:

我使用以下代码实现此目的:
mPaint.setColor(Color.BLACK);
canvas.drawCircle((int) (mSize.right / 2), (int) (mSize.bottom / 2),
mWidthOutside, mPaint);
mPaint.setColor(Color.LTGRAY);
canvas.drawCircle((int) (mSize.right / 2), (int) (mSize.bottom / 2),
mWidthInside, mPaint);
Run Code Online (Sandbox Code Playgroud)
这样做的问题是背景是静态的LTGRAY,我希望透明.
我怎样才能让圆圈的中心透明?
我试过以下希望该drawArc函数只能创建一条画线宽度的线条,而不是填充中心.它在面部填充中心.
RectF rectF = new RectF(centerX - mRadius, centerY - mRadius, centerX
+ mRadius, centerY + mRadius);
canvas.drawArc(rectF, 0, 360, false, mPaint);
Run Code Online (Sandbox Code Playgroud)
关于如何保持圆心的透明度的建议?
小序幕: 我正在为Android创建一种绘图应用程序(API 14及更高版本).几个月前我开始研究它并决定使用SurfaceView作为画布来绘制.我认为这是一个很好的决定,因为 SurfaceView 可以直接使用Graphics.一切似乎工作正常,直到有一天我注意到绘图过程有点滞后.那里可能有很多奇怪的代码.
无论如何,现在我正在优化代码和东西,我想,我真的需要使用SurfaceView这样的场景吗?我需要从"画布"中获取的主要内容是绘制平滑并能够将所有绘图保存到位图 - >外部存储上的文件(这样可以正常工作).
那么,我应该使用简单的View还是SurfaceView?此外,听到你的决定/主张的道具和缺点会很棒.
谢谢
我正在为android开发自定义视图.为此我想让用户能够选择和使用图像,就像使用时一样ImageView
在attr.xml中,我添加了以下代码.
<declare-styleable name="DiagonalCut">
<attr name="altitude" format="dimension"/>
<attr name="background_image" format="reference"/>
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)
在自定义视图中,我得到的值Drawable是xml中提供的值app:background_image="@drawable/image"
TypedArray typedArray = getContext().obtainStyledAttributes(arr, R.styleable.DiagonalCut);
altitude = typedArray.getDimensionPixelSize(R.styleable.DiagonalCut_altitude,10);
sourceImage = typedArray.getDrawable(R.styleable.DiagonalCut_background_image);
Run Code Online (Sandbox Code Playgroud)
我想使用sourceImage它创建一个Bitmap ,这是一个Drawable对象.
如果我出错的方式请提供替代方案.
android-canvas ×10
android ×9
android-jetpack-compose-canvas ×3
bitmap ×2
draw ×2
android-view ×1
animation ×1
java ×1
kotlin ×1
surfaceview ×1
touch-event ×1
view ×1