抖音短视频APP开发通过三种方式绘制图片
(一)ImageView绘制图片
(1)将图片分别放入mipmap-hdpi、assets
(2)布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:id="@+id/iv_picture"android:layout_width="match_parent"android:layout_height="wrap_content"></ImageView></LinearLayout>
(3)代码:
// ImageView加载几种来源: // (1)drawable/mipmap中通过R.drawabe.xxx加载图片资源 // (2)assests路径的资源public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView customImageView = findViewById(R.id.iv_picture);// 方式一:drawable/mipmap中通过R.drawabe.xxx加载图片资源// customImageView.setBackgroundResource(R.mipmap.wuqian);// 方式二:加载assests路径的资源customImageView.setImageBitmap(getImageFromAssetsFile(this, "lilangdi.jpg"));}public static Bitmap getImageFromAssetsFile(Context context, String fileName) {Bitmap image = null;AssetManager am = context.getResources().getAssets();try {InputStream is = am.open(fileName);image = BitmapFactory.decodeStream(is);is.close();} catch(IOException e) {e.printStackTrace();}return image;}}
(二)SurfaceView绘制图片
(1)将图片放入手机文件夹内
(2)布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><SurfaceViewandroid:id="@+id/sv_drawpicture"android:layout_width="match_parent"android:layout_height="match_parent"></SurfaceView></LinearLayout>
(3)添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
(4)代码:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);verifyStoragePermissions(this);setContentView(R.layout.activity_main);SurfaceView mSurfaceView = findViewById(R.id.sv_drawpicture);mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {if (holder == null) {return;}Paint paint = new Paint();paint.setAntiAlias(true);paint.setStyle(Paint.Style.STROKE);// 方式一:Environment.getExternalStorageDirectory().getPath()获取路径为:/storage/emulated/0// File.separator得到的是:/Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "wuqian.jpg"); // 获取bitmap// 方式二:// Bitmap bitmap = BitmapFactory.decodeFile("/storage/emulated/0/wuqian.jpg"); // 获取bitmapCanvas canvas = holder.lockCanvas(); // 先锁定当前surfaceView的画布canvas.drawBitmap(bitmap, 0, 0, paint); //执行绘制操作holder.unlockCanvasAndPost(canvas); // 解除锁定并显示在界面上}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}});}private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE" };public static void verifyStoragePermissions(Activity activity) {try {// 检测是否有写的权限int permission = ActivityCompat.checkSelfPermission(activity,"android.permission.WRITE_EXTERNAL_STORAGE");if (permission != PackageManager.PERMISSION_GRANTED) {// 没有写的权限,去申请写的权限,会弹出对话框ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);}} catch (Exception e) {e.printStackTrace();}}}
(三) 自定义View绘制图片
(1)将图片放入手机或者放入mipmap-hdpi
(2)布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.lzacking.viewdemo.CustomViewandroid:id="@+id/customview"android:layout_width="match_parent"android:layout_height="match_parent"></com.lzacking.viewdemo.CustomView></LinearLayout>
(3)添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
(4)代码:
CustomView:public class CustomView extends View {Paint paint = new Paint();Bitmap bitmap;public CustomView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);paint.setAntiAlias(true);paint.setStyle(Paint.Style.STROKE);// 方式一:从手机读取图片bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "kugou.png"); // 获取bitmap// 方式二:从mipmap-hdpi读取图片// bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.taylor);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 不建议在onDraw做任何分配内存的操作if (bitmap != null) {canvas.drawBitmap(bitmap, 0, 0, paint);}}}
MainActivity:
// 方式一:从手机读取图片
// 方式二:从mipmap-hdpi读取图片
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 如果从手机读取图片,则需要申请权限verifyStoragePermissions(this);setContentView(R.layout.activity_main);}private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE" };public static void verifyStoragePermissions(Activity activity) {try {// 检测是否有写的权限int permission = ActivityCompat.checkSelfPermission(activity,"android.permission.WRITE_EXTERNAL_STORAGE");if (permission != PackageManager.PERMISSION_GRANTED) {// 没有写的权限,去申请写的权限,会弹出对话框ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);}} catch (Exception e) {e.printStackTrace();}}}
抖音短视频APP开发通过三种方式绘制图片相关推荐
- IOS抖音短视频APP开发关于扫描二维码,并根据文本生成二维码
IOS抖音短视频APP开发关于扫描二维码,(根据光线强弱显示隐藏闪光灯)并根据文本生成二维码. WeakSelf; //IOS抖音短视频APP开发构建扫描样式视图 _scanView = [[WSLS ...
- 抖音短视频APP开发如何生成二维码?
授权转载自云豹网络科技的CSDN博客 原文链接:https://blog.csdn.net/yb1314111/article/details/101283985 IOS抖音短视频APP开发关于扫描二 ...
- 抖音短视频APP开发进度条(ProgressBar)的功能与用法
在layout下的activity_main中: <?xml version="1.0" encoding="utf-8"?> <Linear ...
- 抖音短视频APP开发逻辑翻页与物理翻页
逻辑翻页与物理翻页的区别 逻辑分页-假分页:将数据全部加载到内存,根据rowBound里面的偏移量,和条数,将偏移量之前的都去掉,只去从偏移量开始后指定数量的那一部分: 物理分页- 真分页:将分页信息 ...
- 如何开发仿抖音短视频APP源码?
如何开发仿抖音短视频APP源码? 流程列表 开发一个短视频最主要的流程分为 3 个,下面我将分步教你实现这 3 个流程下的各个功能点,功能点 API 可按需调用: 视频拍摄 a.启动拍摄 b.给拍摄添 ...
- 原生Java高仿抖音短视频APP双端源码
简介: 从别的网站199购买的原生Java高仿抖音短视频APP双端源码,免费给大家~ 源码未测试,java开发,上手有难度,小白童鞋请勿瞎捣鼓. 安卓语言是:android stdio 苹果语言是:O ...
- 抖音短视频APP——产品体验报告
本文是抖音短视频APP的一份产品体验报告,主要从体验环境.市场概况.产品概况.目标用户人群.产品架构图.主要功能分析.交互体验.视觉设计和优化建议这九个方面进行阐述. 本文是本人入门产品经理的一份练习 ...
- 仿抖音短视频APP源码如何开发抖音类似特效
仿抖音短视频APP源码如何开发抖音类似特效 1.特效概览 特效列表 特效列表 2.『灵魂出窍』 抖音的实现效果如下: 灵魂出窍 我的实现效果如下: ezgif.com-rotate.gif 代码实现 ...
- shell date 日期格式化_抖音短视频系统开发,日期加减
let dateTime=new Date(); this.dateFomat是对日期格式化为 yyyy - mm - dd的格式 // 减一天 dateTime = dateTime.setDate ...
最新文章
- excel表格制作计算机一级,计算机一级OFFICE辅导:给Excel表格添加背景音乐
- mysql session变量_mysql 系统变量和session变量
- 黄河农场谋定区位优势-农业大健康·万祥军:现代农业示范区
- HTML/CSS学习笔记01【概念介绍、基本标签】
- React with Webpack -1: 介绍Helloworld
- 以太坊互助保险项目Nexus Mutual新增支持Badger DAO
- Python基础——min/max与np.argmin/np.argmax
- 电子书的下载与查阅书的源码
- Openproj 在64位操作系统报错errno=193
- 100以内奇数的平方和
- hpm1005能扫描不能打印_惠普M1005怎么只能打印复印不能扫描了?
- Deep Feedforward Networks(3)
- 半挂式洒水车的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 开心农场最新外挂助手下载
- Oracle触发器,删除一条数据的同时删除另一张表的关联数据
- vue移动端开启键盘 页面底部样式乱了
- 【代码小记】赏析《RAFT:运动属性的光流感知》
- 科学探索奖名单揭晓:北大数学「黄金一代」袁新意上榜,首现90后获奖人
- CISP证书价值​NISP证书价值|CISP和NISP含金量如何
- mysql 语句 简书_MySQL SQL语句
热门文章
- 项目管理PMP好考吗,没有经验?
- 站立者的心,只有努力努力再努力
- git 报错 destination path already exists and is not empty director
- win7 32/64位系统安装ug nx4.0
- 天堂2mysql_天堂2单机版 L2J-som-rotm 安装全过程及常用工具 一步到位
- 免费搭建企业级直播平台,破解H5Storm限制
- 离散数学期末复习知识点(不挂科系列)
- shepp logan matlab,怎么用MATLAB生成一个三维的Shepp-Logan头骨模型并保存下来,谢谢了...
- html如何添加web字体,html中字体如何实现加粗(方法介绍)_WEB前端开发,html,字体加粗...
- virtualbox导入虚拟机(ubuntu)