SurfaceView和View的区别
View 主要适用于主动更新的情况,而 surfaceView 主要适用于被动更新,例如频繁的刷新。
View 在主线程中对画面进行刷新,而 surfaceView 通常会通过一个子线程来进行页面的刷新
View 在绘图时没有使用双缓冲机制,而 surfaceView 在底层实现机制上就已经实现了双缓冲机制。
SurfaceView的应用
Paint是画笔Canvas是画布。
canvas.drawRect(100,100,500,300,paint);画矩形
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.mipmap.d1);
canvas.drawBitmap(bitmap,100,400,paint);画一张图片
canvas.drawArc(100,800,600,900,9,96,false,paint);画一个弧
画板的监听事件
surfaceId.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
int action = event.getAction();
switch (action) {
//点击下去的时候执行这个
case MotionEvent.ACTION_DOWN:
path.moveTo(x,y);
break;
//移动画笔的时候执行这个
case MotionEvent.ACTION_MOVE:
Canvas canvas = holder.lockCanvas();
path.lineTo(x,y);
canvas.drawPath(path,paint);
holder.unlockCanvasAndPost(canvas);
break;
//松开画笔的时候执行这个
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
intent的隐式意图跳转
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
Uri parse = Uri.parse("tel:"+"1008611");
intent.setData(parse);
startActivity(intent);
View decorView = getWindow().getDecorView();
decorView.setDrawingCacheEnabled(true);
Bitmap drawingCache = decorView.getDrawingCache();
picId.setImageBitmap(drawingCache);
try {
drawingCache.compress(Bitmap.CompressFormat.PNG,100,new FileOutputStream("/mnt/sdcard/aa.png"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File("/mnt/sdcard/hehe.png");
Uri uriForFile = FileProvider.getUriForFile(MainActivity.this, "com.example.xiangji", file);
intent.putExtra(MediaStore.EXTRA_OUTPUT,uriForFile);
startActivity(intent);
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(intent,100);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri parse = Uri.parse("https://www.baidu.com/");
intent.setData(parse);
startActivity(intent);