用手指在Canvas上绘图,Android。
原因:这段代码演示了如何在Android中使用手指在画布上绘制图形。然而,问题是无法通过手指在画布上绘制。
解决方法:为了解决这个问题,需要对代码进行一些修改。具体的修改如下:
1. 在DoodleCanvas类中添加一个成员变量:
private List
2. 修改onTouchEvent方法中的ACTION_DOWN和ACTION_MOVE部分:
case MotionEvent.ACTION_DOWN: mPath = new Path(); mPath.moveTo(event.getX(), event.getY()); mPaths.add(mPath); break; case MotionEvent.ACTION_MOVE: mPath.lineTo(event.getX(), event.getY()); invalidate(); break;
3. 修改onDraw方法:
protected void onDraw(Canvas canvas) { for (Path path : mPaths) { canvas.drawPath(path, mPaint); } super.onDraw(canvas); }
通过以上修改,可以实现通过手指在画布上绘制图形。
问题:在Canvas上使用手指绘图时,如何清除绘制内容以及如何保存绘制内容?width和height变量是如何获取的?
原因:代码中没有提供清除绘制内容和保存绘制内容的方法,导致用户困惑。
解决方法:添加清除绘制内容和保存绘制内容的方法,并在onSizeChanged方法中设置width和height变量的值。
清除绘制内容的方法:
public void clearDrawing() { setDrawingCacheEnabled(false); onSizeChanged(width, height, width, height); invalidate(); setDrawingCacheEnabled(true); }
保存绘制内容的方法:
public void saveDrawing() { Bitmap whatTheUserDrewBitmap = getDrawingCache(); whatTheUserDrewBitmap = ThumbnailUtils.extractThumbnail(whatTheUserDrewBitmap, 256, 256); ImageView testArea = ... testArea.setImageBitmap(whatTheUserDrewBitmap); ByteArrayOutputStream baos = new ByteArrayOutputStream(); whatTheUserDrewBitmap.compress(Bitmap.CompressFormat.PNG, 0, baos); byte[] yourByteArray; yourByteArray = baos.toByteArray(); }
width和height变量的获取:
在onSizeChanged方法中,通过参数w和h获取宽度和高度,并将其赋值给width和height变量。
注意:如果想要刷新绘图区域,需要调用invalidate()方法。
希望这对你有帮助!
在这段代码中,出现了一个问题:无法保存绘制的结果。为了解决这个问题,可以添加一个保存功能的代码。
在MainActivity类中的onOptionsItemSelected()方法中添加以下代码:
case Save: AlertDialog.Builder editalert = new AlertDialog.Builder(MainActivity.this); editalert.setTitle("请输入保存的文件名"); final EditText input = new EditText(MainActivity.this); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); input.setLayoutParams(lp); editalert.setView(input); editalert.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String name = input.getText().toString(); Bitmap bitmap = dv.getDrawingCache(); String path = Environment.getExternalStorageDirectory().getAbsolutePath(); File file = new File(path + "/" + name + ".png"); try { if (!file.exists()) { file.createNewFile(); } FileOutputStream ostream = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG, 10, ostream); ostream.close(); dv.invalidate(); } catch (Exception e) { e.printStackTrace(); } finally { dv.setDrawingCacheEnabled(false); } } }); editalert.show(); return true;
这样,用户可以在绘制完成后点击菜单中的保存选项,输入文件名后保存绘制的结果。