你的位置:首页 > 操作系统

[操作系统]Android 实现图片画画板


本文主要讲述了Android 实现图片画画板

设计项目布局:

<RelativeLayout ="http://schemas.android.com/apk/res/android"  ="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();    }  }