Android 多媒體開發學習之製作一個簡單的畫板
一個簡單的畫板,可以繪製,可以選擇顏色,可以儲存。 當然了這種工具一般常用的通訊軟體都是會有的,比如QQ, 飛秋等
其中我們必須監聽手指的觸摸事件,手指的觸摸事件就分為3種: 按下,抬起,移動。 通常我們只需要關係按下的時候,然後就是整個手指滑動的過程。然後將手指滑動的過程繪製為不同的直線。當然也可以設定繪製的顏色,繪製直線的寬度等。
public class MainActivity extends Activity {private int TouchX;private int TouchY;private Paint paint;private Canvas canvas;Bitmap bitmapCopy;ImageView lView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1: 先建立一個畫板的背景圖片,這時候這圖片需要修改,就需要建立該圖片的副本 Bitmap bitmapSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg); bitmapCopy = Bitmap.createBitmap(bitmapSrc.getWidth(), bitmapSrc.getHeight(), bitmapSrc.getConfig()); paint = new Paint(); canvas = new Canvas(bitmapCopy); canvas.drawBitmap(bitmapSrc, new Matrix(), paint); lView = (ImageView) findViewById(R.id.lv); lView.setImageBitmap(bitmapCopy); //2: 就需要監聽手指的觸摸事件 lView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {//手指觸摸分三種: 按下, 抬起,移動int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN://首先是按下,當按下時,需要記錄第一次按下的位置TouchX = (int) event.getX();TouchY = (int) event.getY();break;case MotionEvent.ACTION_MOVE://只要每次移動,都會產生移動事件的,得到當前的座標int x = (int)event.getX();int y = (int)event.getY();//畫線canvas.drawLine(TouchX, TouchY, x, y, paint);//更改下次繪製的起始座標TouchX = x;TouchY = y;lView.setImageBitmap(bitmapCopy);break;case MotionEvent.ACTION_UP:break;}//true:告訴系統,這個觸摸事件由我來處理//false:告訴系統,這個觸摸事件我不處理,這時系統會把觸摸事件傳遞給imageview的父節點return true;}}); } //設定畫筆的顏色為紅色 public void red(View v) { paint.setColor(Color.RED); } //設定畫筆的顏色為綠色 public void green(View v) { paint.setColor(Color.GREEN); } //設定刷子的寬度 public void brush(View v) { paint.setStrokeWidth(7); } //儲存 public void save(View v) { File file = new File(sdcard/tupian.png); FileOutputStream fStream = null; try {fStream = new FileOutputStream(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} //儲存為png格式,100代表最高品質 bitmapCopy.compress(CompressFormat.PNG, 100, fStream); }}
以上就是一個簡單的畫板,可以繪製簡單的圖片,可以實現儲存。