android 编辑画线,如何在android中用手指在imageview上绘制线条

翟理
2023-12-01

您应该覆盖视图的onDraw方法.

screen_drawing_room.xml

android:id="@+id/rlid"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="bottom"

android:orientation="vertical"

android:weightSum="1.0" >

android:id="@+id/view_drawing_pad"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

在你的活动onCreate()

DrawingView mDrawingView=new DrawingView(this);

setContentView(R.layout.screen_drawing_room);

LinearLayout mDrawingPad=(LinearLayout)findViewById(R.id.view_drawing_pad);

mDrawingPad.addView(mDrawingView);

DrawingView.java

定义DrawingView.以下可用于徒手画.修改相同以绘制线条,文本和填充颜色(封闭区域).对于洪水填充,请参阅链接 android using flood fill algorithm getting out of memory exception

中的已接受答案.

class DrawingView extends View {

Paint mPaint;

//MaskFilter mEmboss;

//MaskFilter mBlur;

Bitmap mBitmap;

Canvas mCanvas;

Path mPath;

Paint mBitmapPaint;

public DrawingView(Context context) {

super(context);

// TODO Auto-generated constructor stub

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setDither(true);

mPaint.setColor(0xFFFF0000);

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeJoin(Paint.Join.ROUND);

mPaint.setStrokeCap(Paint.Cap.ROUND);

mPaint.setStrokeWidth(20);

mPath = new Path();

mBitmapPaint = new Paint();

mBitmapPaint.setColor(Color.RED);

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

mCanvas = new Canvas(mBitmap);

}

@Override

public void draw(Canvas canvas) {

// TODO Auto-generated method stub

super.draw(canvas);

canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

canvas.drawPath(mPath, mPaint);

}

private float mX, mY;

private static final float TOUCH_TOLERANCE = 4;

private void touch_start(float x, float y) {

//mPath.reset();

mPath.moveTo(x, y);

mX = x;

mY = y;

}

private void touch_move(float x, float y) {

float dx = Math.abs(x - mX);

float dy = Math.abs(y - mY);

if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {

mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);

mX = x;

mY = y;

}

}

private void touch_up() {

mPath.lineTo(mX, mY);

// commit the path to our offscreen

mCanvas.drawPath(mPath, mPaint);

//mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN));

// kill this so we don't double draw

mPath.reset();

// mPath= new Path();

}

@Override

public boolean onTouchEvent(MotionEvent event) {

float x = event.getX();

float y = event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

touch_start(x, y);

invalidate();

break;

case MotionEvent.ACTION_MOVE:

touch_move(x, y);

invalidate();

break;

case MotionEvent.ACTION_UP:

touch_up();

invalidate();

break;

}

return true;

}

}

您的“绘图”视图已设置.研究图形文件夹下sdk上样本的fingerpaint.java.

结果是打火机.你在后台看到的是一张图片.在前景我画画.我在角落画线.如果你能说出它是红色的.

画出看起来像边框的线条.将油漆的描边宽度设置为您喜欢的任何颜色.类似地,您可以通过更改x1,y1和x2,y2坐标来绘制所需的线条.

Display display = ( (Activity) mcontext).getWindowManager().getDefaultDisplay();

float w = display.getWidth();

float h = display.getHeight();

canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

canvas.drawLine(0, 0, w, 0,mBitmapPaint);

canvas.drawLine(0, 0, 0, h,mBitmapPaint);

canvas.drawLine(w,h,w,0,mBitmapPaint);

canvas.drawLine(w, h, 0,h , mBitmapPaint);

编辑:

从图库中获取图像

File fp;

Drawable d;

public void setImagefrmGallery() {

// To open up a gallery browser

Intent intent = new Intent();

intent.setType("image/*");

intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(Intent.createChooser(intent, "Select Picture"),1);

// To handle when an image is selected from the browser, add the following to your Activity

}

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == RESULT_OK) {

if (requestCode == 1) {

// currImageURI is the global variable I�m using to hold the content:// URI of the image

Uri currImageURI = data.getData();

System.out.println("Hello======="+getRealPathFromURI(currImageURI));

String s= getRealPathFromURI(currImageURI);

File file = new File(s);

if (file.exists()) {

fp=file.getAbsolutePath();

d = Drawable.createFromPath(file.getAbsolutePath());

mDrawingPad.setBackgroundDrawable(d);

} else {

System.out.println("File Not Found");

}

}

}

}

// And to convert the image URI to the direct file system path of the image file

public String getRealPathFromURI(Uri contentUri) {

// can post image

String [] proj={MediaStore.Images.Media.DATA};

Cursor cursor = managedQuery( contentUri,

proj, // Which columns to return

null, // WHERE clause; which rows to return (all rows)

null, // WHERE clause selection arguments (none)

null); // Order-by clause (ascending by name)

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

cursor.moveToFirst();

return cursor.getString(column_index);

}

 类似资料: