旗帜飞扬核心算法思想:
图片每个交织点的横坐标较之前不发生变化,而纵坐标较之前呈现一个三角函数的周期性变化

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方法实现旗帜飞扬,舞动的图片效果相关推荐

  1. 按钮 toast android,Android Toast使用方法(普通提示和带图片的提示)

    Toast 是一种非常方便的消息提示框,有两个特点: 1.Toast提示信息不会获取焦点. 2.Toast提示信息过一段时会自动消失. 使用方法比较简单,一般通过以下步骤: 1.调用Toast构造器或 ...

  2. Android 仿京东淘宝 商品详情页 商品图片效果

    最近重构商品,产品要求,按照淘宝京东来.... 成品如图这个效果 思路就是监听外边ScrollView的滑动监听,然后给上边图片设置margin,二话不说上代码 简单的界面布局 <?xml ve ...

  3. android phonegap插件开发方法 plugin

    2019独角兽企业重金招聘Python工程师标准>>> android phonegap插件开发方法 plugin 分类: phonegap 2014-03-03 22:41  59 ...

  4. Android getWindow().setFlags方法

    Android getWindow().setFlags方法 //设置窗体全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR ...

  5. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  6. Android截屏方法总结

    最近研究了一些Android的截屏方法,做一个总结. 图片剪裁方法 使用View.getDrawingCache()得到Bitmap.非常简单但是只能截图本应用的图片,并且没办法控制截图的范围. 对B ...

  7. [转]JS调用Android里面的方法,Android调用JS里面的方法

    FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...

  8. Android之Inflate()方法用途+setContentView和inflate区别

    引用:http://blog.chinaunix.net/uid-27024249-id-3304935.html Android之Inflate()方法用途 Inflate()作用就是将xml定义的 ...

  9. android 解决getColor()方法过时

    今天,简单讲讲android里如何解决getColor()方法过时的问题. 之前,我写博客讲了程序员需要解决过时的方法的问题,Google会提供过时函数的替代函数,程序员有责任找到替代函数,并且解决过 ...

最新文章

  1. C#文字转语音,实时播放以及mp3,wav文件保存
  2. mysql查询表的数据大小
  3. 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例 | 根据 “ 线性时不变系统 “ 定义证明 )
  4. java socket wex5_WeX5集成ActiveMQ+WebSocket实现消息推送
  5. ML之GMM:Gaussian Mixture Model高斯混合模型相关论文、算法步骤相关配图
  6. underscore 系列之防冲突与 Utility Functions
  7. Linux进程间通信——管道
  8. 基于ARM 构架(带MMU)的copy_from_user与copy_to_user详细分析
  9. oracle数据库多表联查并排序,oracle数据库之多表联接查询(一)
  10. python模块之configparser
  11. 计算机专业学生求职信500字,计算机专业求职信500字范文
  12. 操作系统之进程管理:10、信号量机制(整形、记录型)
  13. Javascript——声明提升(函数、变量提升)
  14. gentoo/funtoo 环境配置使用 valgrind
  15. 超详细的计算机视觉竞赛汇总
  16. Verilog 语法合集
  17. FPGA电源设计总结
  18. vue+js input文本框输入时自动填充邮箱后缀组件封装
  19. Deeplink(深度链接)拉起App,我是这样做到的
  20. 如何高效提高倾斜摄影三维模型顶层合并的技术方法分析

热门文章

  1. 计算机网络——电子邮件客户端程序设计与实现
  2. 获国际权威认可 | 云扩科技入选《RPA全球市场格局报告,Q3 2022》
  3. 如何将WPS转Word
  4. java 正则表达式的应用:读取文件,获取其中的电话号码
  5. 荣耀v20支持html,荣耀V20支持NFC刷公交吗 荣耀V20支持NFC功能吗
  6. Cocos Creator游戏引擎可以支持鼠标吗_Cocos Creator入门实战:桌球小游戏
  7. upfst是什么函数C语言,一种基于KF和STUPF组合滤波的SINS大方位失准角初始对准方法技术...
  8. ps切图与版心页面布局注意问题
  9. 史上最强的美名腾智能起名成功发布
  10. MACD金叉启动副图/选股指标 通达信 源码 有未来