- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我单击图像按钮时,我无法更改油漆的颜色或厚度,即使我也对其进行了编程。我知道我做错了,我想我知道为什么,但我无法修复它。我觉得我没有调用正确的画笔。这是我的 Java 类代码:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class CanvasView extends View
{
private Paint paint = new Paint();
private Path path = new Path();
private Canvas canvas = new Canvas();
private Paint canvasPaint = new Paint();
private Bitmap canvasBitmap;
public CanvasView(Context context, AttributeSet attrs)
{
super(context, attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas = new Canvas(canvasBitmap);
}
@Override
protected void onDraw(Canvas drawCanvas)
{
drawCanvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
drawCanvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent e)
{
// get the coords of the touch event
float eventX = e.getX();
float eventY = e.getY();
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
// set a new starting point
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
// connect the points
path.lineTo(eventX, eventY);
break;
default:
return false;
}
//makes you view repaint and call ondraw
invalidate();
return true;
}
public void clearCanvas()
{
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
}
这是我的 MainActivity 代码:
public class MainActivity extends Activity {
private CanvasView canvasView;
private Paint paint;
private int orange;
private int purple;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
canvasView = (CanvasView) findViewById(R.id.canvasView);
paint = new Paint();
orange = Color.rgb(255, 245, 238);
purple = Color.rgb(128, 0, 128);
// REGULAR BUTTONS: save, about, reset
Button saveB = (Button) findViewById(R.id.saveButton);
Button aboutB = (Button) findViewById(R.id.aboutButton);
Button resetB = (Button) findViewById(R.id.resetButton);
// IMAGE BUTTONS: red, blue, green, yellow, black, purple, orange, erase, brush thickness plus, brush thickness minus
ImageButton redIb = (ImageButton) findViewById(R.id.redButton);
ImageButton blueIb = (ImageButton) findViewById(R.id.blueButton);
ImageButton greenIb = (ImageButton) findViewById(R.id.greenButton);
ImageButton yellowIb = (ImageButton) findViewById(R.id.yellowButton);
ImageButton blackIb = (ImageButton) findViewById(R.id.blackButton);
ImageButton purpleIb = (ImageButton) findViewById(R.id.purpleButton);
ImageButton orangeIb = (ImageButton) findViewById(R.id.orangeButton);
ImageButton eraseIb = (ImageButton) findViewById(R.id.eraseButton);
ImageButton plusIb = (ImageButton) findViewById(R.id.plusButton);
ImageButton minusIb = (ImageButton) findViewById(R.id.minusButton);
minusIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setStrokeWidth(-5);
}
});
plusIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setStrokeWidth(5);
}
});
eraseIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(Color.TRANSPARENT);
}
});
orangeIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(orange);
}
});
purpleIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(purple);
}
});
blackIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(Color.BLACK);
}
});
yellowIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(Color.YELLOW);
}
});
greenIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(Color.GREEN);
}
});
blueIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(Color.BLUE);
}
});
redIb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
paint.setColor(Color.RED);
}
});
saveB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
aboutB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
startActivity(intent);
}
});
resetB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
canvasView.clearCanvas();
// canvasView.clearCanvas2();
}
});
}
最佳答案
您正在完全不同的 Paint 上设置值,该 Paint 与您的 CanvasView 没有连接。您必须更改 CanvasView 的 Paint 并对其调用 invalidate 才能进行任何更改。
在 CanvasView 中实现类似的操作来更改描边宽度:
public void setStrokeWidth(int strokeWidth) {
paint.setStrokeWidth(strokeWidth);
invalidate();
}
并在 onClick()
中使用 canvasView.setStrokeWidth(5);
颜色也是如此:
public void setColor(int color) {
paint.setColor(color);
invalidate();
}
并在 onClick()
中使用 canvasView.setColor(Color.BLUE);
关于java - 如何在 Android 中更改 Canvas 上颜料的颜色/厚度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080826/
我只是以为我已经知道WPF和XAML语法的工作原理...。 wrooong。 我收到消息: 'WithEvents' variables can only be typed as classes, i
我正在使用 SmartTabLayout。我想使用这样的指标(如圆圈)。我在 xml 中找不到合适的参数。有什么想法吗? 想要这个: 我有这个: XML代码: 最佳答案 浏览演示中的一些代码。我遇
目前这是我的 scrollbar.xml 文件: 这是我的 ScrollView: 这是它给我的滚动条。挺好的,就是太厚太明显了。在这个屏幕截图中,它可能看起来并不厚,但确
一个简单的 - 可能是基本的 - 我无法找到答案的问题:如何更改/管理 ggtern 中的轴宽度/厚度?看起来不适用于 ggtern 的常用命令帮助将不胜感激提前致谢拉斯 最佳答案 这是由 ggter
我目前正在使用日历插件 (fullcalendar)。我只是在它的 CSS 文件中找不到我可以自定义 eventBorderColor 的宽度/厚度的地方。谢谢! 最佳答案 重写 .fc-event-
我的问题是默认的 Slider 太细了。有没有办法让 Slider(宽度)变大? 感谢您的建议。 最佳答案 在 JavaFX 中,大部分样式都可以通过 CSS 完成。 您可以在 CSS 文件中使用 .
我有这个 SeekBar: 我已尝试使用 maxHeight 更改此 SeekBar 厚度。但什么都没有改变。它看起来像这样: 我想将此 SeekBar 的粗细更改为 3dp 并使其
我知道,3D 条形图是一种罪过。但是我被要求做它们,作为一种权衡,我建议只制作一个比酒吧顶部和右侧的酒吧颜色稍深的边框。像那样,酒吧会有某种“阴影”(urgh),但至少你仍然可以比较它们。 有没有办法
我想让组合图表中的 vaxis 基线更粗/更粗。 我可以用下面的代码改变颜色 vAxis: { baselineColor: '#FFA500', }, 有没有办法改变宽度? 最佳答案 没有改
background: linear-gradient(left,#000,#000 100%,rgba(0,0,0,0) 100%,rgba(0,0,0,0)); 这是代码。我想要一条 8px 的线
是否可以使用 ggplot2 2.0 引入的 stroke 参数?调整条形边框的粗细?如果没有,有没有办法控制沿点边界厚度线的条形边界厚度? Stroke applies to borders aro
当我单击图像按钮时,我无法更改油漆的颜色或厚度,即使我也对其进行了编程。我知道我做错了,我想我知道为什么,但我无法修复它。我觉得我没有调用正确的画笔。这是我的 Java 类代码: import and
刚学html,如何增加 SVG 谷歌图标的笔划宽度?这似乎不起作用。 HTML: arrow_forward 最佳答案 我看起来像是在尝试增加 SVG 的大小,而不是更改单个笔画的大小。如果是
我想从 c3.js 自定义圆环图,例如圆弧厚度。 非常感谢任何帮助或指点。 var chart = c3.generate({ data: { columns: [
目前,我正在使用以下语法定义元素宽度: 我想要的是使用类似的语法来定义 border-width css 属性,如下所示: 我怎样才能做到这一点? 最佳答案 我发现我可以做这样的事情: // Ht
我是一名优秀的程序员,十分优秀!