Android 实现简易画图板
效果如图
直接上代码
public class PaintActivity extends Activity implements OnItemSelectedListener {
private ImageView iv;
private Bitmap bitmap;
private Canvas canvas;
// 为了不让onItemtSelecter报空指针,所以在这里创建画笔对象
private Paint paint = new Paint();
private String[] colorsArr = { "红色", "绿色", "蓝色", "黑色", "白色" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_paint);
Spinner sp = (Spinner) findViewById(R.id.act_paint_color_sp);
iv = (ImageView) findViewById(R.id.act_paint_iv);
// 创建给sp用的arrayAdapter对象
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, colorsArr);
// 设置一个更好看的下拉列表的视图资源
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 给sp设置适配器
sp.setAdapter(adapter);
// 给sp设置条目选择监听器 不能使用条目点击监听器
sp.setOnItemSelectedListener(this);
// 给IV添加触摸监听器
iv.setOnTouchListener(new OnTouchListener() {
private float startX;
private float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
// switch触摸的action
switch (event.getAction()) {
// 按下
case MotionEvent.ACTION_DOWN:
// 获取按下去的坐标点
startX = event.getX();
startY = event.getY();
if (bitmap == null) {
// 创建画纸对象 参数1,2:画纸宽高,参数3:画纸质量
bitmap = Bitmap.createBitmap(iv.getWidth(),
iv.getHeight(), Config.ARGB_8888);
// 创建画板对象
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
// 设置画笔粗细
paint.setStrokeWidth(5);
}
break;
// 移动
case MotionEvent.ACTION_MOVE:
// 获取当前移动到的坐标点
float currentX = event.getX();
float currentY = event.getY();
// 将起始点和当前点连线
canvas.drawLine(startX, startY, currentX, currentY, paint);
// 因为MOVE会多次调用,为了实现连贯效果,绘制完当前直线后将起始点进行重新赋值,把上次的结束点作
// 为起始点准备下一次的绘制
startX = currentX;
startY = currentY;
// 将绘制好的bitmap设置给IV显示
iv.setImageBitmap(bitmap);
break;
// 抬起
case MotionEvent.ACTION_UP:
Log.d("tag", "up");
break;
}
return true;
}
});
}
public void save(View view) throws IOException {
if(bitmap == null) {
Toast.makeText(this, "您还没画,不需要保存~!", Toast.LENGTH_SHORT).show();
return;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String format = sdf.format(new Date());
File file = new File(Environment
.getExternalStorageDirectory().toString()
+ "/"
+ format
+ ".jpg");
// 添加权限<uses-permission
// android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
FileOutputStream fos = new FileOutputStream(file);
boolean compress = bitmap.compress(CompressFormat.JPEG, 100, fos);
Toast.makeText(this, compress ? "成功" : "失败", Toast.LENGTH_SHORT).show();
if(compress){
// 给相册app发送广播,接收到后会更新图库
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(file));
sendBroadcast(intent);
}
}
public void clear(View view) {
// 清空画纸
bitmap = null;
iv.setImageBitmap(bitmap);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
switch (position) {
case 0:
paint.setColor(Color.RED);
break;
case 1:
paint.setColor(Color.GREEN);
break;
case 2:
paint.setColor(Color.BLUE);
break;
case 3:
paint.setColor(Color.BLACK);
break;
case 4:
paint.setColor(Color.WHITE);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}