Android使用drawBitmapMesh方法实现旗帜飞扬,舞动的图片效果
旗帜飞扬核心算法思想:
图片每个交织点的横坐标较之前不发生变化,而纵坐标较之前呈现一个三角函数的周期性变化
public class WaveFlag extends View {private Bitmap bitmap;private final static int HEIGHT = 80;private final static int WIDTH = 60;float[] orig, verts;private final float A = 3.0f;private double k ;public WaveFlag(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}private void init(Context context) {bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.seekbar_bg_pic);orig = new float[((WIDTH + 2) * 2 * HEIGHT + 1)];verts = new float[(WIDTH + 2) * 2 * HEIGHT + 1];float bitmapWidth = bitmap.getWidth();float bitmapHeight = bitmap.getHeight();int index = 0;for (int y = 0; y <= HEIGHT; y++) {float fy = bitmapHeight * y / HEIGHT;for (int x = 0; x <= WIDTH; x++) {float fx = bitmapWidth * x / WIDTH;orig[index * 2 + 0] = verts[index * 2 + 0] = fx;//这里人为将坐标+100是为了让图像下移,避免扭曲后被屏幕遮挡orig[index * 2 + 1] = verts[index * 2 + 1] = fy + 100;index += 1;}}}public void flagWave() {for (int j = 0; j < HEIGHT; j++) {for (int i = 0; i <= WIDTH; i++) {verts[(j * (WIDTH + 1) + i) * 2 + 0] += 0;float offsetY = (float) Math.sin((float) i / WIDTH * 2 * Math.PI + Math.PI * k);verts[(j*(WIDTH+1)+i)*2+1] = orig[(j*WIDTH+i)*2+1]+offsetY* A;}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);flagWave();k+=0.1F;canvas.drawBitmapMesh(bitmap,WIDTH,HEIGHT,verts,0,null,0,null);invalidate();}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".CH6.section6.WaveFlagActivity"><wangsheng.swpuiot.qunyingzhuan.CH6.section6.WaveFlagandroid:layout_width="match_parent"android:layout_height="match_parent" /></FrameLayout>
public class WaveFlagActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wave_flag);}
}
Android使用drawBitmapMesh方法实现旗帜飞扬,舞动的图片效果相关推荐
- 按钮 toast android,Android Toast使用方法(普通提示和带图片的提示)
Toast 是一种非常方便的消息提示框,有两个特点: 1.Toast提示信息不会获取焦点. 2.Toast提示信息过一段时会自动消失. 使用方法比较简单,一般通过以下步骤: 1.调用Toast构造器或 ...
- Android 仿京东淘宝 商品详情页 商品图片效果
最近重构商品,产品要求,按照淘宝京东来.... 成品如图这个效果 思路就是监听外边ScrollView的滑动监听,然后给上边图片设置margin,二话不说上代码 简单的界面布局 <?xml ve ...
- android phonegap插件开发方法 plugin
2019独角兽企业重金招聘Python工程师标准>>> android phonegap插件开发方法 plugin 分类: phonegap 2014-03-03 22:41 59 ...
- Android getWindow().setFlags方法
Android getWindow().setFlags方法 //设置窗体全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR ...
- android+发邮件,Android发送邮件的方法实例详解
Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...
- Android截屏方法总结
最近研究了一些Android的截屏方法,做一个总结. 图片剪裁方法 使用View.getDrawingCache()得到Bitmap.非常简单但是只能截图本应用的图片,并且没办法控制截图的范围. 对B ...
- [转]JS调用Android里面的方法,Android调用JS里面的方法
FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...
- Android之Inflate()方法用途+setContentView和inflate区别
引用:http://blog.chinaunix.net/uid-27024249-id-3304935.html Android之Inflate()方法用途 Inflate()作用就是将xml定义的 ...
- android 解决getColor()方法过时
今天,简单讲讲android里如何解决getColor()方法过时的问题. 之前,我写博客讲了程序员需要解决过时的方法的问题,Google会提供过时函数的替代函数,程序员有责任找到替代函数,并且解决过 ...
最新文章
- C#文字转语音,实时播放以及mp3,wav文件保存
- mysql查询表的数据大小
- 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例 | 根据 “ 线性时不变系统 “ 定义证明 )
- java socket wex5_WeX5集成ActiveMQ+WebSocket实现消息推送
- ML之GMM:Gaussian Mixture Model高斯混合模型相关论文、算法步骤相关配图
- underscore 系列之防冲突与 Utility Functions
- Linux进程间通信——管道
- 基于ARM 构架(带MMU)的copy_from_user与copy_to_user详细分析
- oracle数据库多表联查并排序,oracle数据库之多表联接查询(一)
- python模块之configparser
- 计算机专业学生求职信500字,计算机专业求职信500字范文
- 操作系统之进程管理:10、信号量机制(整形、记录型)
- Javascript——声明提升(函数、变量提升)
- gentoo/funtoo 环境配置使用 valgrind
- 超详细的计算机视觉竞赛汇总
- Verilog 语法合集
- FPGA电源设计总结
- vue+js input文本框输入时自动填充邮箱后缀组件封装
- Deeplink(深度链接)拉起App,我是这样做到的
- 如何高效提高倾斜摄影三维模型顶层合并的技术方法分析
热门文章
- 计算机网络——电子邮件客户端程序设计与实现
- 获国际权威认可 | 云扩科技入选《RPA全球市场格局报告,Q3 2022》
- 如何将WPS转Word
- java 正则表达式的应用:读取文件,获取其中的电话号码
- 荣耀v20支持html,荣耀V20支持NFC刷公交吗 荣耀V20支持NFC功能吗
- Cocos Creator游戏引擎可以支持鼠标吗_Cocos Creator入门实战:桌球小游戏
- upfst是什么函数C语言,一种基于KF和STUPF组合滤波的SINS大方位失准角初始对准方法技术...
- ps切图与版心页面布局注意问题
- 史上最强的美名腾智能起名成功发布
- MACD金叉启动副图/选股指标 通达信 源码 有未来