iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 实现旋转木马的音乐效果
  • 894
分享到

Android 实现旋转木马的音乐效果

音乐Android 2022-06-06 08:06:05 894人浏览 八月长安
摘要

一、百度在线音乐旋转木马效果 就上面那个,当音乐在播放的时候,那个光碟轮子在转,就想旋转木马一般。感觉好好玩啊。 碰巧想起前阵子做音乐播放器,哎,那这个也可以做在手机的音乐播

一、百度在线音乐旋转木马效果

就上面那个,当音乐在播放的时候,那个光碟轮子在转,就想旋转木马一般。感觉好好玩啊。
碰巧想起前阵子做音乐播放器,哎,那这个也可以做在手机的音乐播放器上,这样就代替了进度条了。
一想到,就兴奋,于是,首先画圆形,然后放置背景图片,然后使用动画旋转。当音乐播放时,同时
开始播放圆形图片的动画,当音乐暂停时,暂停旋转;当音乐停止播放时,就停止动画,图片回到原点。

二、效果

三、实现代码

(1)MainActivity  


<span style="font-size:18px;">public class MainActivity extends Activity {
  MediaPlayer m1;
  ImageView infoOperatingIV;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    infoOperatingIV = (ImageView) findViewById(R.id.infoOperating);
    Button play = (Button) findViewById(R.id.play);
    Button stop = (Button) findViewById(R.id.stop);
    play.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        playMusic();
      }
    });
    stop.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        stopMusic();
      }
    });
  }
  private void playMusic() {
    m1 = MediaPlayer.create(this, R.raw.quiet);
    m1.start();
    Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
    LinearInterpolator lin = new LinearInterpolator();
    operatingAnim.setInterpolator(lin);
    if (operatingAnim != null) {
      infoOperatingIV.startAnimation(operatingAnim);
    }
    m1.setOnCompletionListener(new OnCompletionListener() {
      @Override
      public void onCompletion(MediaPlayer mp) {
        mp.stop();
        infoOperatingIV.clearAnimation();
      }
    });
  }
  private void stopMusic() {
    m1.stop();
    infoOperatingIV.clearAnimation();
  }
}</span><span style="font-size: 16pt;">
</span>

(2)画圆的控件,这部分代码参考了网友的。


  <span style="font-size:18px;">public class RoundImageView extends ImageView {
  private int mBorderThickness = 0;
  private Context mContext;
  private int defaultColor = 0xFFFFFFFF;
  // 如果只有其中一个有值,则只画一个圆形边框
  private int mBorderOutsideColor = 0;
  private int mBorderInsideColor = 0;
  // 控件默认长、宽
  private int defaultWidth = 0;
  private int defaultHeight = 0;
  public RoundImageView(Context context) {
    super(context);
    mContext = context;
  }
  public RoundImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    setCustomAttributes(attrs);
  }
  public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mContext = context;
    setCustomAttributes(attrs);
  }
  private void setCustomAttributes(AttributeSet attrs) {
    TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.roundedimageview);
    mBorderThickness = a.getDimensionPixelSize(R.styleable.roundedimageview_border_thickness, 0);
    mBorderOutsideColor = a.getColor(R.styleable.roundedimageview_border_outside_color, defaultColor);
    mBorderInsideColor = a.getColor(R.styleable.roundedimageview_border_inside_color, defaultColor);
  }
  @Override
  protected void onDraw(canvas canvas) {
    Drawable drawable = getDrawable();
    if (drawable == null) {
      return;
    }
    if (getWidth() == 0 || getHeight() == 0) {
      return;
    }
    this.measure(0, 0);
    if (drawable.getClass() == NinePatchDrawable.class)
      return;
    Bitmap b = ((BitmapDrawable) drawable).getBitmap();
    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
    if (defaultWidth == 0) {
      defaultWidth = getWidth();
    }
    if (defaultHeight == 0) {
      defaultHeight = getHeight();
    }
    // 保证重新读取图片后不会因为图片大小而改变控件宽、高的大小(针对宽、高为wrap_content布局的imageview,但会导致margin无效)
    // if (defaultWidth != 0 && defaultHeight != 0) {
    // LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    // defaultWidth, defaultHeight);
    // setLayoutParams(params);
    // }
    int radius = 0;
    if (mBorderInsideColor != defaultColor && mBorderOutsideColor != defaultColor) {// 定义画两个边框,分别为外圆边框和内圆边框
      radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - 2 * mBorderThickness;
      // 画内圆
      drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderInsideColor);
      // 画外圆
      drawCircleBorder(canvas, radius + mBorderThickness + mBorderThickness / 2, mBorderOutsideColor);
    } else if (mBorderInsideColor != defaultColor && mBorderOutsideColor == defaultColor) {// 定义画一个边框
      radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - mBorderThickness;
      drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderInsideColor);
    } else if (mBorderInsideColor == defaultColor && mBorderOutsideColor != defaultColor) {// 定义画一个边框
      radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - mBorderThickness;
      drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderOutsideColor);
    } else {// 没有边框
      radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2;
    }
    Bitmap roundBitmap = getCroppedRoundBitmap(bitmap, radius);
    canvas.drawBitmap(roundBitmap, defaultWidth / 2 - radius, defaultHeight / 2 - radius, null);
  }
  
  public Bitmap getCroppedRoundBitmap(Bitmap bmp, int radius) {
    Bitmap scaledSrcBmp;
    int diameter = radius * 2;
    // 为了防止宽高不相等,造成圆形图片变形,因此截取长方形中处于中间位置最大的正方形图片
    int bmpWidth = bmp.getWidth();
    int bmpHeight = bmp.getHeight();
    int squareWidth = 0, squareHeight = 0;
    int x = 0, y = 0;
    Bitmap squareBitmap;
    if (bmpHeight > bmpWidth) {// 高大于宽
      squareWidth = squareHeight = bmpWidth;
      x = 0;
      y = (bmpHeight - bmpWidth) / 2;
      // 截取正方形图片
      squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);
    } else if (bmpHeight < bmpWidth) {// 宽大于高
      squareWidth = squareHeight = bmpHeight;
      x = (bmpWidth - bmpHeight) / 2;
      y = 0;
      squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);
    } else {
      squareBitmap = bmp;
    }
    if (squareBitmap.getWidth() != diameter || squareBitmap.getHeight() != diameter) {
      scaledSrcBmp = Bitmap.createScaledBitmap(squareBitmap, diameter, diameter, true);
    } else {
      scaledSrcBmp = squareBitmap;
    }
    Bitmap output = Bitmap.createBitmap(scaledSrcBmp.getWidth(), scaledSrcBmp.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    Paint paint = new Paint();
    Rect rect = new Rect(0, 0, scaledSrcBmp.getWidth(), scaledSrcBmp.getHeight());
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setDither(true);
    canvas.drawARGB(0, 0, 0, 0);
    canvas.drawCircle(scaledSrcBmp.getWidth() / 2, scaledSrcBmp.getHeight() / 2, scaledSrcBmp.getWidth() / 2, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(scaledSrcBmp, rect, rect, paint);
    bmp = null;
    squareBitmap = null;
    scaledSrcBmp = null;
    return output;
  }
  
  private void drawCircleBorder(Canvas canvas, int radius, int color) {
    Paint paint = new Paint();
    
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setDither(true);
    paint.setColor(color);
    
    paint.setStyle(Paint.Style.STROKE);
    
    paint.setStrokeWidth(mBorderThickness);
    canvas.drawCircle(defaultWidth / 2, defaultHeight / 2, radius, paint);
  }
}</span><span style="font-size: 16pt;">
</span>

以上就是Android 实现旋转木马的音乐效果,有需要的朋友可以参考下。


--结束END--

本文标题: Android 实现旋转木马的音乐效果

本文链接: https://www.lsjlt.com/news/24679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 原生js实现旋转木马效果
    本文实例为大家分享了js实现旋转木马效果的具体代码,供大家参考,具体内容如下 html部分 <div class="wrap" id="wrap">     <di...
    99+
    2024-04-02
  • HTLM怎么实现动态旋转木马效果
    这篇文章主要介绍“HTLM怎么实现动态旋转木马效果”,在日常操作中,相信很多人在HTLM怎么实现动态旋转木马效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTLM怎么实现...
    99+
    2024-04-02
  • HTML5+css3如何实现3D旋转木马效果
    这篇文章主要介绍HTML5+css3如何实现3D旋转木马效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、perspectiveperspective属性包括两个属性:none和...
    99+
    2024-04-02
  • 基于Vue3实现旋转木马动画效果
    做的比较丑 最后图片 本来打算用vue-carousel-3d这个组件的,但是这个组件一直报源码错误,修改了半天也没有解决 效果图 实现代码 使用了swiper组件 html部分...
    99+
    2024-04-02
  • 微信小程序怎么实现旋转木马效果
    这篇文章主要介绍“微信小程序怎么实现旋转木马效果 ”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现旋转木马效果 ”文章能帮助大家解决问题。文章涉及技术点微信小程序原生Swiper控件...
    99+
    2023-06-26
  • css3如何实现旋转木马
    这篇文章将为大家详细讲解有关css3如何实现旋转木马,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、perspectiveperspective属性包括两个属性:non...
    99+
    2024-04-02
  • vue实现旋转木马动画
    本文实例为大家分享了vue实现旋转木马动画的具体代码,供大家参考,具体内容如下 图片数量可为任意值都能正常处理 [1-无限个]: <!DOCTYPE html> &l...
    99+
    2024-04-02
  • 怎么用javascript实现旋转木马
    本篇内容主要讲解“怎么用javascript实现旋转木马”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用javascript实现旋转木马”吧! ...
    99+
    2024-04-02
  • android实现icon动态旋转效果
    本文实例为大家分享了android实现icon动态旋转效果的具体代码,供大家参考,具体内容如下 碰到客户的这样一个需求,点击icon后,前景的icon开始旋转,背景的icon不动,就...
    99+
    2024-04-02
  • JS实现旋转木马轮播案例
    本文实例为大家分享了JS实现旋转木马轮播的具体代码,供大家参考,具体内容如下 效果: 每张图片排列的位置是以中间为对称的。图片大小,透明度不相同,但对称的图片的样式是相同的,呈现出一...
    99+
    2024-04-02
  • Vue组件实现旋转木马动画
    本文实例为大家分享了Vue组件实现旋转木马动画的具体代码,供大家参考,具体内容如下 源码如下 <template> <div id="wrapper">...
    99+
    2024-04-02
  • android实现音乐跳动效果的示例代码
    效果图 实现 整体的流程图如下 上面主要步骤分为3个 1、计算宽度能放下多少列的音频块。 2、计算每一列中音频块的个数 3、绘制音频块 1、计算宽度能放下多少列的音频块。 ...
    99+
    2024-04-02
  • Android利用Flutter实现立体旋转效果
    目录前言ImageShader 简介构建 ui.Image对象使用 ImageShader 填充形状立体旋转效果实现总结前言 之前我们提到了 CustomPaint er 的 Pai...
    99+
    2024-04-02
  • vue旋转木马组件demo怎么实现
    本文小编为大家详细介绍“vue旋转木马组件demo怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue旋转木马组件demo怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现步骤1.确定组件类型确...
    99+
    2023-07-05
  • opencv实现图像旋转效果
    本文实例为大家分享了opencv实现图像旋转效果的具体代码,供大家参考,具体内容如下 图像旋转: 在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩阵进行变换 参数:...
    99+
    2024-04-02
  • Flutter实现旋转扫描效果
    效果图: 1 .测试Demo启动文件 main() { runApp(MaterialApp( home: SignSwiperPage(), )); } cla...
    99+
    2024-04-02
  • JS旋转实现转盘抽奖效果
    本文实例为大家分享了JS旋转实现转盘抽奖效果的具体代码,供大家参考,具体内容如下 闲来没事,做了一个模拟转盘抽奖的HTML&JS的效果: 可以在设置的时候,选择几个区域,并...
    99+
    2024-04-02
  • jquery如何实现div的旋转效果
    本篇内容介绍了“jquery如何实现div的旋转效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,在HTML中创建一个div元素:&l...
    99+
    2023-07-06
  • Android中实现ProgressBar菊花旋转进度条的动画效果
    在一些常见到的加载中需要显示一个加载动画,如旋转的菊花,旋转的圈圈等等动画…,然后我们现在就来说下怎么去试下它吧 一.菊花的旋转动画 1.新建一个drawable文件 在res/d...
    99+
    2024-04-02
  • css旋转动画效果的实现方法
    这篇文章主要讲解了“css旋转动画效果的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css旋转动画效果的实现方法”吧!我们可以通过css来做出动画...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作