我使用了一张我们可以从图库中选择的图像,或者使用相机。我正在使用自定义视图进行缩放和自由手绘。我已经使用画布和绘画在图像上进行编辑,但我的问题是,当我们开始在触摸事件上绘画时,它被绘制但 x,y 坐标不同,它显示在触摸点下方很多地方。请帮助我如何改进我的代码以实现我的目标我的代码在这里......
public class EditImage extends Activity implements OnTouchListener{
TouchImageView edit_img;//custom image view
Bitmap bitmap;
String imagepath;
Bitmap alteredBitmap,alteredBitmap1;
Canvas canvas;
Paint paint;
Matrix matrix;
float downx = 0;
float downy = 0;
float upx = 0;
float upy = 0;
int count=0;
/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editscreen2);
// TODO Auto-generated method stub
Button back_btn=(Button)findViewById(R.id.back_button);
back_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
Intent extras=getIntent();
Uri imageFileUri = Uri.parse(extras.getStringExtra("imagepath"));
edit_img=(TouchImageView)findViewById(R.id.editimage);
Log.i("imagepath2",imageFileUri+"");
try {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream
(imageFileUri), null, bmpFactoryOptions);
alteredBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Config.ARGB_8888);
canvas = new Canvas(alteredBitmap);
paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(5);
matrix = new Matrix();
canvas.drawBitmap(bitmap, matrix, paint);
Drawable drawable = (Drawable)new BitmapDrawable(alteredBitmap);
edit_img.setBackgroundDrawable(drawable);
} catch (Exception e) {
Log.v("ERROR", e.toString());
}
edit_img.setOnTouchListener(this);
setfunction();
}
private void setfunction()
{
Button done_btn=(Button)findViewById(R.id.done);
done_btn.setVisibility(View.VISIBLE);
done_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String root = Environment.getExternalStorageDirectory().toString();
// File myDir = new File(root + "/saved_image);
String imagename = "Image.png";
File file = new File (root, imagename);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
alteredBitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
Intent intent=new Intent(EditImage2.this,SaveImage.class);
intent.putExtra("imagepath",alteredBitmap);
startActivity(intent);
}
});
Button erase_btn=(Button)findViewById(R.id.erase);
erase_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
canvas.drawColor(0, Mode.CLEAR);
canvas.drawBitmap(bitmap,matrix, paint);
}
});
}
public boolean onTouch(View v, MotionEvent event) {
if(event.getPointerCount()>1)
{
edit_img.setMaxZoom(4f);
}
else
{
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
Log.i("touch points x,y",downx+"/"+downy);
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
Log.i("touch points upx,upy",upx+"/"+upy);
canvas.drawLine(downx, downy, upx, upy, paint);
downx = upx;
downy = upy;
Log.i("touch points x,y",downx+"/"+downy);
//edit_img.invalidate();
v.invalidate();
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
}
return true;
}
}