【android】音视频开发一:绘制图片
本文目标
在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View
绘制准备:申请手机权限
<!--添加权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
之后动态申请权限
/** * 请求权限 */ private void initPermissions() { permissionsList.clear(); //判断哪些权限未授予 for(String permission : permissions){ if(ActivityCompat.checkSelfPermission(this,permission)!= PackageManager.PERMISSION_GRANTED){ permissionsList.add(permission); } } //请求权限 if(!permissionsList.isEmpty()){ String[] permissions = permissionsList.toArray(new String[permissionsList.size()]);//将List转为数组 ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_REQUEST); } } /** * 权限回调, * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode){ case PERMISSION_REQUEST: //1609990641704.jpg,手机sdcard目录下的图片 String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator; Log.e(TAG, "onCreate: filePath : "+fileNamePath ); Bitmap bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg"); ImageView viewById = findViewById(R.id.iv_test); viewById.setImageBitmap(bitmap); break; default: break; } }
- ImageView绘制图片
//testone.jpg,手机sdcard目录下的图片 String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator; Log.e(TAG, "onCreate: filePath : "+fileNamePath ); Bitmap bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg"); ImageView viewById = findViewById(R.id.iv_test); viewById.setImageBitmap(bitmap);
通过以上代码,在手机界面上就可以看到已经绘制的图片了。
- surfaceview绘制图片
final SurfaceView viewById = findViewById(R.id.iv_test_sv); viewById.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { //surface创建 if (holder == null){ return; } Paint paint = new Paint(); //设置是否使用抗锯齿功能,会消耗较大资源,导致绘制图形变慢 paint.setAntiAlias(true); //设置图像是否抖动处理 paint.setDither(true); //设置画笔样式 paint.setStyle(Paint.Style.STROKE); String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator; Log.e(TAG, "onCreate: filePath : "+fileNamePath ); Bitmap bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg"); Canvas canvas = holder.lockCanvas(); canvas.drawBitmap(bitmap,0,0,paint); holder.unlockCanvasAndPost(canvas); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } });
- 自定义view绘制图片
public class ShowImageView extends View { private final Paint paint; private final Bitmap bitmap; public ShowImageView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); } public ShowImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint = new Paint(); //设置是否使用抗锯齿功能,会消耗较大资源,导致绘制图形变慢 paint.setAntiAlias(true); //设置图像是否抖动处理 paint.setDither(true); //设置画笔样式 paint.setStyle(Paint.Style.STROKE); String fileNamePath = Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator; bitmap = BitmapFactory.decodeFile( fileNamePath+"testone.jpg"); } public ShowImageView(Context context) { this(context,null); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (bitmap != null){ canvas.drawBitmap(bitmap,0,0,paint); } } }
以上就是三种图片绘制的方式,让我们继续学习下一章节吧— 音视频开发二:Android平台PCM 数据的采集和播放
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-02-16 【git】coding迁移GitHub-Git仓库迁移保留commit历史记录