当前位置:首页 > 谈天说地

Android实现网易云推荐歌单界面

34资源网2022-02-14619
目录
  • 前言
  • 一、实现
    • 1.自定义一个圆角图片控件(也可直接使用第三方框架)
    • 2.进行布局摆设
    • 3.图片切换动画效果
  • 二、实现效果展示
    • 三、总结

      先来看看网易云app的效果:

      前言

      关于网易云音乐推荐歌单界面的实现

      一、实现

      1.自定义一个圆角图片控件(也可直接使用第三方框架)

      由于是一些简单的绘制,就不一一介绍了,直接上代码。

      public class mellowimageview extends imageview {
          private paint paint;
      
          public mellowimageview(context context) {
              super(context);
          }
      
          public mellowimageview(context context, @nullable attributeset attrs) {
              super(context, attrs);
          }
      
          public mellowimageview(context context, @nullable attributeset attrs, int defstyleattr) {
              super(context, attrs, defstyleattr);
              paint=new paint();
          }
          /**
           * 绘制圆角矩形图片
           * @author jimeng
           */
          @override
          protected void ondraw(canvas canvas) {
              drawable drawable = getdrawable();
              if (null != drawable) {
                  bitmap bitmap = getbitmapfromdrawable(drawable);
                  bitmap b = getroundbitmapbyshader(bitmap,getwidth(),getheight(), 20,0);
                  final rect rectsrc = new rect(0, 0, b.getwidth(), b.getheight());
                  final rect rectdest = new rect(0,0,getwidth(),getheight());
      
                  canvas.drawbitmap(b, rectsrc, rectdest, paint);
      
              } else {
                  super.ondraw(canvas);
              }
          }
      
          /**
           * 把图片转换成bitmap
           * @param drawable
           * 资源图片
           * @return 位图
           */
          public static bitmap getbitmapfromdrawable(drawable drawable) {
              int width = drawable.getintrinsicwidth();
              int height = drawable.getintrinsicheight();
              bitmap bitmap = bitmap.createbitmap(width, height, drawable
                      .getopacity() != pixelformat.opaque ? bitmap.config.argb_8888
                      : bitmap.config.rgb_565);
              canvas canvas = new canvas(bitmap);
              drawable.draw(canvas);
              return bitmap;
          }
      
          public static bitmap getroundbitmapbyshader(bitmap bitmap, int outwidth, int outheight, int radius, int boarder) {
              if (bitmap == null) {
                  return null;
              }
              int width = bitmap.getwidth();
              int height = bitmap.getheight();
              float widthscale = outwidth * 1f / width;
              float heightscale = outheight * 1f / height;
      
              matrix matrix = new matrix();
              matrix.setscale(widthscale, heightscale);
              //创建需要输出的bitmap
              bitmap desbitmap = bitmap.createbitmap(outwidth, outheight, bitmap.config.argb_8888);
              canvas canvas = new canvas(desbitmap);
              paint paint = new paint(paint.anti_alias_flag);
              //着色器
              bitmapshader bitmapshader = new bitmapshader(bitmap, shader.tilemode.clamp, shader.tilemode.clamp);
              //给着色器配置matrix
              bitmapshader.setlocalmatrix(matrix);
              paint.setshader(bitmapshader);
              //创建矩形区域并且预留出border
              rectf rect = new rectf(boarder, boarder, outwidth - boarder, outheight - boarder);
              //把传入的bitmap绘制到圆角矩形区域内
              canvas.drawroundrect(rect, radius, radius, paint);
              return desbitmap;
          }
      
      
      
      }
      

      效果图如下:

      时间原因,一些简单的细节没有画上去。

      2.进行布局摆设

      将整个布局放在horizontalscrollview中使其可以左右滑动,以一个item为例。

      <horizontalscrollview
          xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:scrollbars="none"
          android:orientation="horizontal"
          >
       <linearlayout
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:orientation="horizontal">
      <!--     美化,并无其他作用-->
           <relativelayout
               android:layout_width="@dimen/jimeng_dp_16"
               android:layout_height="@dimen/jimeng_dp_135"/>
      
        
           <relativelayout
               android:layout_width="@dimen/jimeng_dp_130"
               android:layout_height="@dimen/jimeng_dp_135"
               >
      
               <textview
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_below="@id/like_icon2"
                   android:layout_centerhorizontal="true"
                   android:text="计蒙不吃鱼"
                   android:maxlines="1"
                   android:ellipsize="end"
                   android:textcolor="@color/jimeng_black"
                   android:textsize="12.0dip" />
      
               <com.shenzhen.jimeng.jmhnzsb.view.mellowimageview
                   android:id="@+id/like_icon2"
                   android:layout_width="120.0dip"
                   android:layout_height="120.0dip"
                   android:layout_centerhorizontal="true"
                   android:scaletype="centercrop"
                   android:src="@drawable/yf1" />
      
           </relativelayout>
          
       </linearlayout>
      
      </horizontalscrollview >
      

      3.图片切换动画效果

      博主使用的是viewflipper。
      xml代码如下

      <relativelayout
          xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content"
          android:layout_height="wrap_content">
          <viewflipper
              android:id="@+id/viewflipper"
              android:layout_width="120.0dip"
              android:layout_height="120.0dip"
              android:flipinterval="3000"
              android:inanimation="@anim/anim_marquee_in"
              android:outanimation="@anim/anim_marquee_out" />
      </relativelayout>
      

      划重点:两个动画文件,计蒙调试的将近30分钟才调试成类似效果
      anim_marquee_in:

      <?xml version="1.0" encoding="utf-8"?>
      
          <set xmlns:android="http://schemas.android.com/apk/res/android">
              <translate
                  android:duration="500"
                  android:fromydelta="120%p"
                  android:toydelta="0"/>
          <scale
              android:duration="500"
              android:fromxscale="0.8"
              android:fromyscale="0.8"
              android:toxscale="1"
              android:toyscale="1"
              android:pivoty="50%"
              android:pivotx="50%"/>
          </set>
      
      

      anim_marquee_out:

      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <translate
              android:duration="500"
              android:fromydelta="0"
              android:toydelta="-120%p"/>
          <scale
              android:duration="500"
              android:fromxscale="1"
              android:fromyscale="1"
              android:toxscale="0.8"
              android:toyscale="0.8"
              android:pivoty="50%"
              android:pivotx="50%">
      
          </scale>
      
      </set
      

      在java文件中为viewflipper添加view:

          private viewflipper viewflipper;
          //---------------------------------
          viewflipper.removeallviews();
          view view = view.inflate(getcontext(), r.layout.home_rebroadcast_item, null);
          mellowimageview carouselimageview=view.findviewbyid(r.id.carousel_item_iv);
          view view1 = view.inflate(getcontext(), r.layout.home_rebroadcast_item1, null);
          mellowimageview carouselimageview1=view.findviewbyid(r.id.carousel_item_iv);
      
          // 循环滚动图片的点击事件
          // iv.setonclicklistener(new ....);
          //添加view
          viewflipper.addview(view);
          viewflipper.addview(view1);
      

      二、实现效果展示

      三、总结

      效果其实比较好实现,但是很多地方需要设置一些判断。

      到此这篇关于android实现网易云推荐歌单界面的文章就介绍到这了,更多相关android网易云歌单界面内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

      看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

      快手极速版二维码

      快手极速版新人见面礼

      除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

      邀请两个好友奖最高196元,如下图所示:

      快手极速版邀请好友奖励

      扫描二维码推送至手机访问。

      版权声明:本文由34楼发布,如需转载请注明出处。

      本文链接:https://www.34l.com/post/7666.html

      分享给朋友:

      相关文章

      冠状病毒"族谱"曝光,这些防控要点很重要

      冠状病毒"族谱"曝光,这些防控要点很重要

      自新冠疫情发生以来,医生、护士、社区工作者、公安民警、媒体工作者……等等各行各业人员都战斗在战疫前沿,而更多的人们为了阻断病毒的传播链,听从指挥和安排宅在家里。目前,中国疫情防控走过了最最艰难的时刻,但世界疫情却在极速升温,“外防输入,内防…

      让长寿花开花有什么窍门?长寿花开花的几个条件分享

      让长寿花开花有什么窍门?长寿花开花的几个条件分享

      长寿花虽然说是一种多肉植物,但是它却和其他的很多多肉植物有很多不同的地方,长寿花由肥大、光亮的叶片形成的低矮株丛,终年翠绿。这种植物比较好看,也容易养,是送亲朋好友最好的礼物。马上要12月了,现在市面上卖花卉的很多。很多人不会养长寿花,尤其…

      低成本创业好项目,这个可日赚几千元

      低成本创业好项目,这个可日赚几千元

      这几年创业项目也变得越来越多了,大家都知道,现在靠打工是挣不了什么钱的,所以,很多人宁愿自己创业不想打工。那么,低成本创业项目有哪些呢?下面小编马上为大家推荐一个低成本创业项目,如果你有资源的话,也可以免费去推广操作,做好了日赚几千也是很容…

      英国正在调查一种新出现的变异病毒

      英国正在调查一种新出现的变异病毒

      新华社伦敦3月11日电(记者张家伟 金晶)英国英格兰公共卫生局11日表示,该国近期确诊两例感染了一种新的变异新冠病毒的病例,目前正在对这一新的变异病毒开展调查。…

      工具人是什么意思,工具人是什么梗?

      工具人是什么意思,工具人是什么梗?

      最近网络上面出现比较多的一个词语就是“工具人”,那么,什么样的人会将他形容成是工具呢?这个是让网友们觉得比较的好奇的,主要是指的什么?在微博上面经常看到有网络语工具人这样的表达,所以引起了很多网友的关注,想要了解这个词语,那么工具人是什么意…

      抖音如果让我遇见你而你正当年轻是什么歌曲?

      抖音如果让我遇见你而你正当年轻是什么歌曲?

      《抖音》短视频平台上有不少老歌经过翻唱火了,可能刚好歌词传递的情感引起了网友们的共鸣,而最近比较火的一首歌歌词大概是如果让我遇见你而你正当年轻,好多网友不知道首是什么歌曲?小编刚开始也不知道,后来经过搜索得知这是一首老歌《怨苍天变了心》,是…