本文主要讲述了Android 实现图片画画板
设计项目布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:layout_above="@+id/bt" android:id="@+id/iv" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <Button android:id="@+id/bt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:onClick="save" android:text="保存图片" /> </RelativeLayout>
首先实现画图功能:
public class MainActivity extends Activity { private ImageView iv; private Bitmap baseBitmap; private Canvas canvas; private Paint paint; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); paint = new Paint(); paint.setStrokeWidth(5); paint.setColor(Color.GREEN); // 创建一个可以被修改的bitmap baseBitmap = Bitmap.createBitmap(320, 360, Bitmap.Config.ARGB_8888); System.out.println("图宽度:"+iv.getWidth()); System.out.println("图高度:"+iv.getHeight()); canvas = new Canvas(baseBitmap); canvas.drawColor(Color.WHITE); // 知道用户手指在屏幕上移动的轨迹 iv.setOnTouchListener(new OnTouchListener() { // 设置手指开始的坐标 int startX; int startY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 手指第一次接触屏幕 startX = (int) event.getX(); startY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE:// 手指在屏幕上滑动 int newX = (int) event.getX(); int newY = (int) event.getY(); canvas.drawLine(startX, startY, newX, newY, paint); // 重新更新画笔的开始位置 startX = (int) event.getX(); startY = (int) event.getY(); iv.setImageBitmap(baseBitmap); break; case MotionEvent.ACTION_UP: // 手指离开屏幕 break; default: break; } return true; } }); } public void save(View view) { } }
接下来完成保存图片的功能:
public void save(View view) { try { File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); FileOutputStream stream = new FileOutputStream(file); baseBitmap.compress(CompressFormat.JPEG, 100, stream); stream.close(); Toast.makeText(this, "保存图片成功", 1).show(); //模拟一个消息通知系统sd卡被重新挂载了 Intent intent = new Intent(); intent.setAction(intent.ACTION_MEDIA_MOUNTED); intent.setData(Uri.fromFile(Environment .getExternalStorageDirectory())); sendBroadcast(intent); } catch (Exception e) { Toast.makeText(this, "保存图片失败", 1).show(); e.printStackTrace(); } }