Android 自定义卫星式弧形菜单

android view横向展开收缩_Android自定义View实战弧形旋转菜单栏——卫星菜单 概述现在很多App会在入口比较浅的页面添加一些快捷操作入口,一方面是为了方便用户操作,一方面是为了提高产品一些关键入口的使用率,让用户能够在浏览信息流的过程中能快速切换至其他一些功能页面。例如豆瓣的首页 (右下角红框选中部分):豆瓣菜单本文将仿照这种菜单效果进行实现,最终效果如下:弧形菜单效果图需要定制的特性1.菜单展开半径2.设置菜单主按钮Icon3.设置菜单子项的各个Icon4.展开... 阅读详情

学自鸿洋(hyman)的imooc视频



[java]  view plain  copy
 print ?
  1. import android.content.Context;  
  2. import android.content.res.TypedArray;  
  3. import android.util.AttributeSet;  
  4. import android.util.TypedValue;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.view.animation.AlphaAnimation;  
  8. import android.view.animation.Animation;  
  9. import android.view.animation.AnimationSet;  
  10. import android.view.animation.RotateAnimation;  
  11. import android.view.animation.ScaleAnimation;  
  12. import android.view.animation.TranslateAnimation;  
  13.   
  14. import com.stone.satellitemenu.R;  
  15.   
  16.   
  17. /** 
  18.  * 卫星式菜单 
  19.  * author : stone 
  20.  * email  : aa86799@163.com 
  21.  * time   : 15/5/7 14 17 
  22.  */  
  23.   
  24. public class SateliteMenu extends ViewGroup implements View.OnClickListener {  
  25.   
  26.     public enum Position {  
  27.         POS_LEFT_TOP, POS_RIGHT_TOP, POS_LEFT_BOTTOM, POS_RIGHT_BOTTOM  
  28.     }  
  29.   
  30.     private final int LEFT_TOP = 1;  
  31.     private final int RIGHT_TOP = 2;  
  32.     private final int LEFT_BOTTOM = 4;  
  33.     private final int RIGHT_BOTTOM = 8;  
  34.     private final int STATUS_OPEN = 0; //菜单的状态 打开  
  35.     private final int STATUS_CLOSE = 1; //菜单的状态 关闭  
  36.   
  37.     private Position mPosition;  
  38.     private int mRadius;  
  39.   
  40.     private int mStatus;  
  41.     private onMenuItemClickListener mMenuItemClickListener;  
  42.     private View mMenuButton;  
  43.   
  44.     public interface onMenuItemClickListener {  
  45.         /** 
  46.          * @param view  item-view 
  47.          * @param position  item-position 
  48.          */  
  49.         void onItemClick(View view, int position);  
  50.     }  
  51.   
  52.   
  53.     public SateliteMenu(Context context) {  
  54.         this(context, null);  
  55.     }  
  56.   
  57.     public SateliteMenu(Context context, AttributeSet attrs) {  
  58.         this(context, attrs, 0);  
  59.     }  
  60.   
  61.     public SateliteMenu(Context context, AttributeSet attrs, int defStyleAttr) {  
  62.         super(context, attrs, defStyleAttr);  
  63.   
  64.         TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SateliteMenu);  
  65.         int position = typedArray.getInt(R.styleable.SateliteMenu_position, LEFT_TOP);  
  66.         //定义半径默认值  
  67.         float defRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, context.getResources().getDisplayMetrics());  
  68.         switch (position) {  
  69.             case LEFT_TOP:  
  70.                 mPosition = Position.POS_LEFT_TOP;  
  71.                 break;  
  72.             case RIGHT_TOP:  
  73.                 mPosition = Position.POS_RIGHT_TOP;  
  74.                 break;  
  75.             case LEFT_BOTTOM:  
  76.                 mPosition = Position.POS_LEFT_BOTTOM;  
  77.                 break;  
  78.             case RIGHT_BOTTOM:  
  79.                 mPosition = Position.POS_RIGHT_BOTTOM;  
  80.                 break;  
  81.         }  
  82.         mRadius = (int) typedArray.getDimension(R.styleable.SateliteMenu_radius, defRadius);  
  83.   
  84.         typedArray.recycle(); //回收  
  85.   
  86.         mStatus = STATUS_CLOSE; //默认关闭状态  
  87.   
  88.     }  
  89.   
  90.     public void setOnMenuItemClickListener(onMenuItemClickListener menuItemClickListener) {  
  91.         this.mMenuItemClickListener = menuItemClickListener;  
  92.     }  
  93.   
  94.     public void setPosition(Position position) {  
  95.         if (mPosition == position) {  
  96.             return;  
  97.         }  
  98.         this.mPosition = position;  
  99.   
  100.         View child;  
  101.         int count = getChildCount();  
  102.         for (int i = 0; i < count; i++) {  
  103.             child = getChildAt(i);  
  104.             child.clearAnimation();  
  105.         }  
  106. //        invalidate(); //会触发 测量、布局和绘制  
  107.         requestLayout(); //这里只要请求布局  
  108.     }  
  109.   
  110.     @Override  
  111.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  112.         super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  113.         //测量子view  
  114.         for (int i = 0, count = getChildCount(); i < count; i++) {  
  115.             //需要传入父view的spec  
  116.             measureChild(getChildAt(i), widthMeasureSpec, heightMeasureSpec);  
  117.         }  
  118.   
  119.     }  
  120.   
  121.     @Override //lt 左上点  rb 右下点  如果 r<l 或 b<t 则无法显示了  
  122.     protected void onLayout(boolean changed, int l, int t, int r, int b) {//l=0, t=0  因为是相对于父view的位置  
  123.         layoutMenuButton();  
  124.         /* 
  125.         分析: 
  126.             menuButton距离每个item为radius。 
  127.             到item作直线,其夹角,应为90度均分。90/(item-1)=每个夹角的度数。 
  128.             有角度,就能求出正弦值sina。 
  129.             根据正弦公式:sina=a/c,且已知c=radius,求出a边长,即x坐标。 
  130.             有角度,就能求出正弦值cosa。 
  131.             余弦公式:cosa=b/c,且已知radius(斜边),求出b边长,即y坐标 
  132.          */  
  133.         int count = getChildCount();  
  134.         double angle = 90.0f / (count - 2);//这里-2,是多减去了一个menuButton  
  135.         View child;  
  136.         int w,h;  
  137.         for (int i = 1; i < count; i++) {  
  138.             child = getChildAt(i);  
  139.             child.setVisibility(View.GONE);  
  140.             w = child.getMeasuredWidth();  
  141.             h = child.getMeasuredHeight();  
  142.             double sin = 0, cos = 0;  
  143.             //Math.toRadians:math.pi/180 * angle = 弧度   angel/180*pi<==>angel*pi/180  
  144.             sin = Math.sin(Math.toRadians(angle * (i - 1))); //第i个角度的 sin(0)=0   i-1即从0开始,会有与屏幕直角边平行的 math.sin需要传弧度值  
  145.             cos = Math.cos(Math.toRadians(angle * (i - 1)));// 邻直角边/斜边   cos(0)=1  
  146.             l = (int) (mRadius * sin); //对横边长  
  147.             t = (int) (mRadius * cos); //邻纵边长  
  148.   
  149.             //左上,左下 left值 就是上面的l l递增    符合默认变化规则  
  150.             //左上,右上 top值 就是上面的t  t递减    符合默认变化规则  
  151.   
  152.             //右上、右下 left值一样: 从右向左 递减  
  153.             if (mPosition == Position.POS_RIGHT_TOP || mPosition == Position.POS_RIGHT_BOTTOM) {  
  154.                 l = getMeasuredWidth() - w - l;  
  155.             }  
  156.             //左下、右下 top值一样: 从上向下 递增  
  157.             if (mPosition == Position.POS_LEFT_BOTTOM || mPosition == Position.POS_RIGHT_BOTTOM) {  
  158.                 t = getMeasuredHeight() - h - t;  
  159.             }  
  160.   
  161.             child.layout(l, t, l + w, t + h);  
  162.   
  163.             final int pos = i;  
  164.             child.setOnClickListener(new OnClickListener() {  
  165.                 @Override  
  166.                 public void onClick(View v) {  
  167.                     if (mMenuItemClickListener != null) {  
  168.                         mMenuItemClickListener.onItemClick(v, pos);  
  169.                         itemAnim(pos);  
  170.                     }  
  171.                     mStatus = STATUS_CLOSE; //关闭状态  
  172.                 }  
  173.             });  
  174.   
  175.         }  
  176.   
  177.     }  
  178.   
  179.     /** 
  180.      * 菜单按钮设置layout 
  181.      */  
  182.     private void layoutMenuButton() {  
  183.         mMenuButton = getChildAt(0);  
  184.         int l = 0, t = 0;  
  185.         int w = mMenuButton.getMeasuredWidth();  
  186.         int h = mMenuButton.getMeasuredHeight();  
  187.         switch (mPosition) {  
  188.             case POS_LEFT_TOP:  
  189.                 l = t = 0;  
  190.                 break;  
  191.             case POS_RIGHT_TOP:  
  192.                 l = getMeasuredWidth() - w;  
  193.                 t = 0;  
  194.                 break;  
  195.             case POS_LEFT_BOTTOM:  
  196.                 l = 0;  
  197.                 t = getMeasuredHeight() - h;  
  198.                 break;  
  199.             case POS_RIGHT_BOTTOM:  
  200.                 l = getMeasuredWidth() - w;  
  201.                 t = getMeasuredHeight() - h;  
  202.                 break;  
  203.         }  
  204.         mMenuButton.layout(l, t, w + l, h + t);  
  205.   
  206.         mMenuButton.setOnClickListener(this);  
  207.     }  
  208.   
  209.     @Override  
  210.     public void onClick(View v) {  
  211.         rotateMenuBotton(mMenuButton, 360, 500);  
  212.         toggleMenu(500);  
  213.   
  214.     }  
  215.   
  216.     private void rotateMenuBotton(View view, int angle, int duration) {  
  217.         RotateAnimation anim = new RotateAnimation(  
  218.                 0, angle, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);  
  219.         anim.setDuration(duration);  
  220.         anim.setFillAfter(true); //view保持在动画结束位置  
  221.         view.startAnimation(anim);  
  222.     }  
  223.   
  224.     /** 
  225.      * 展开/隐藏子菜单 
  226.      * 子菜单动画 平移 
  227.      */  
  228.     private void toggleMenu(int duration) {  
  229.   
  230.         int count = getChildCount();  
  231.         for (int i = 1; i < count; i++) {  
  232.             final View child = getChildAt(i);  
  233.             /* 
  234.                平移动画 以layout中计算的长度 再乘以1或-1 
  235.                close: 
  236.                    左上   r->l b->t 
  237.                    右上   l->r b->t 
  238.                    左下   r->l t->b 
  239.                    右下   l->r t->b 
  240.                open: 
  241.                    左上 
  242.                    右上 
  243.                    左下 
  244.                    右下 
  245.  
  246.                 */  
  247.             int xflag = 1, yflag = 1;  
  248.             //  
  249.             if (mPosition == Position.POS_LEFT_TOP || mPosition == Position.POS_LEFT_BOTTOM) {  
  250.                 xflag = -1;  
  251.             }  
  252.             //  
  253.             if (mPosition == Position.POS_LEFT_TOP || mPosition == Position.POS_RIGHT_TOP) {  
  254.                 yflag = -1;  
  255.             }  
  256.   
  257.             double angle = 90 / (count - 2);  
  258.             /* 
  259.              一个圆的弧度是2π,角度是360°   π/2即90度的弧度 
  260.              */  
  261.             int oppositeLen = (int) (mRadius * Math.sin(Math.PI / 2 / (count - 2) * (i - 1))); //对边 横向  
  262.             int adjacentLen = (int) (mRadius * Math.cos(Math.PI / 2 / (count - 2) * (i - 1))); //邻边 纵向  
  263. /* 
  264.  一个圆的弧度是2π,角度是360°  π/180,每角度对应的弧度   然后乘以角度数=其所对应的弧度 
  265.  */  
  266. //            int oppositeLen = (int) (mRadius * Math.sin(angle * Math.PI / 180 * (i-1))); //对边 横向  
  267. //            int adjacentLen = (int) (mRadius * Math.cos(angle * Math.PI / 180 * (i-1))); //邻边 纵向  
  268.   
  269.   
  270.             int stopx = xflag * oppositeLen;  
  271.             int stopy = yflag * adjacentLen;  
  272.             AnimationSet set = new AnimationSet(true);  
  273.             if (mStatus == STATUS_OPEN) {//如是打开,则要关闭  
  274.                 //4个值是起始点和结束点,相对于自身x、y的距离  
  275.                 TranslateAnimation tranAnim = new TranslateAnimation(0, stopx, 0, stopy);  
  276.                 tranAnim.setStartOffset(mRadius/6);//偏移  
  277.                 set.addAnimation(tranAnim);  
  278.                 AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0);  
  279.                 set.addAnimation(alphaAnim);  
  280.                 set.setAnimationListener(new Animation.AnimationListener() {  
  281.                     @Override  
  282.                     public void onAnimationStart(Animation animation) {  
  283.                         setItemClickable(child, false);  
  284.                     }  
  285.   
  286.                     @Override  
  287.                     public void onAnimationEnd(Animation animation) {  
  288.   
  289.                     }  
  290.   
  291.                     @Override  
  292.                     public void onAnimationRepeat(Animation animation) {  
  293.   
  294.                     }  
  295.                 });  
  296.   
  297.             } else { //要打开  
  298.                 TranslateAnimation tranAnim = new TranslateAnimation(stopx, 0, stopy, 0);  
  299.                 set.addAnimation(tranAnim);  
  300.                 AlphaAnimation alphaAnim = new AlphaAnimation(0.0f, 1.0f);  
  301.                 set.addAnimation(alphaAnim);  
  302.                 set.setAnimationListener(new Animation.AnimationListener() {  
  303.                     @Override  
  304.                     public void onAnimationStart(Animation animation) {  
  305.                         setItemClickable(child, false);  
  306.                     }  
  307.   
  308.                     @Override  
  309.                     public void onAnimationEnd(Animation animation) {  
  310.                         setItemClickable(child, true);  
  311.                     }  
  312.   
  313.                     @Override  
  314.                     public void onAnimationRepeat(Animation animation) {  
  315.   
  316.                     }  
  317.                 });  
  318.             }  
  319.   
  320.             set.setDuration(duration);  
  321.             set.setFillAfter(true);  
  322.             child.startAnimation(set);  
  323.   
  324.         }  
  325.   
  326.         if (mStatus == STATUS_OPEN) {  
  327.             mStatus = STATUS_CLOSE;  
  328.         } else {  
  329.             mStatus = STATUS_OPEN;  
  330.         }  
  331.     }  
  332.   
  333.     /** 
  334.      * item点击动画 
  335.      * @param position 
  336.      */  
  337.     private void itemAnim(int position) {  
  338.         View child;  
  339.         int count = getChildCount();  
  340.         for (int i = 1; i < count; i++) {  
  341.             child = getChildAt(i);  
  342.             if (position == i) {  
  343.                 scaleBigAnim(child);  
  344.             } else {  
  345.                 scaleSmallAnim(child);  
  346.             }  
  347.             setItemClickable(child, false);  
  348.         }  
  349.     }  
  350.   
  351.     private void scaleBigAnim(View view) {  
  352.         ScaleAnimation scaleAnim = new ScaleAnimation(  
  353.                 1.0f, 3f, 1.0f, 3f,  
  354.                 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
  355.         AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0);  
  356.         AnimationSet set = new AnimationSet(true);  
  357.         set.addAnimation(alphaAnim);  
  358.         set.addAnimation(scaleAnim);  
  359.         set.setDuration(800);  
  360.         set.setFillAfter(true);  
  361.         view.startAnimation(set);  
  362.     }  
  363.   
  364.     private void scaleSmallAnim(View view) {  
  365.         ScaleAnimation scaleAnim = new ScaleAnimation(  
  366.                 1.0f, 0, 1.0f, 0,  
  367.                 Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
  368.         AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0);  
  369.         AnimationSet set = new AnimationSet(true);  
  370.         set.addAnimation(alphaAnim);  
  371.         set.addAnimation(scaleAnim);  
  372.         set.setFillAfter(true);  
  373.         set.setDuration(500);  
  374.         view.startAnimation(set);  
  375.     }  
  376.   
  377.     private void setItemClickable(View view, boolean flag) {  
  378.         view.setClickable(flag);  
  379.         view.setFocusable(flag);  
  380.     }  
  381.   
  382.   
  383. }  

我的自定义View项目地址: https://github.com/aa86799/MyCustomView (欢迎start&fork)

本文地址:https://github.com/aa86799/MyCustomView/tree/master/satellitemenu2


圆弧布局,卫星菜单 https://github.com/oguzbilgener/CircularFloatingActionMenu https://github.com/siyamed/android-satellite-menu https://github.com/ogaclejapan/ArcLayout A very simple arc layout library for Android. https://developer.android.com/reference/an.. 阅读详情

相关推荐

实现 Android 自定义卫星菜单

在这个布局文件中,我们使用了 CoordinatorLayout 作为根布局,并添加了一个 FloatingActionButton 作为主按钮,两个 FloatingActionButton 作为子按钮。在 openMenu() 和 closeMenu() 方法中,我们使用了 translationY() 方法来设置子按钮的垂直偏移量,并使用 OvershootInterpolator() 来实现弹性效果。你可以根据自己的需求自定义菜单的样式和动画效果,添加更多的子按钮,以及处理子按钮的点击事件。

code_welike的博客 211

android 星旋转动画,GitHub - yxa512/CircleMenu: Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单...

Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单在上一篇[Android属性动画上手实现各种动画效果,自定义动画,抛物线等] (http://blog.youkuaiyun.com/linglongxin24/article/details/53084234)对属性动画做了简单的介绍,如果不了解的可以去了解一下。今天突发奇想,想到既然属性动画这么强大,我们能不能用属性动画去打造一个扇形的或者...

weixin_39715538的博客 262

Android控件全解手册 - 自定义弧形旋转菜单栏(卫星菜单)

现在很多App会在入口比较浅的页面添加一些快捷操作入口,一方面是为了方便用户操作,一方面是为了提高产品一些关键入口的使用率,让用户能够在浏览信息流的过程中能快速切换至其他一些功能页面。例如豆瓣的首页 (右下角红框选中部分)。

空名先生 1139

Android自定义view实例—卫星菜单

个人回顾: 继承ViewGroup时,要重写onMeasure方法,循环测量子控件,否则自定义view不显示。 对于自定义View,通常会重写onMeasure、onLayout、onDraw三个方法。具体重写哪些,取决于自定义View从哪里继承,然后要实现什么样的功能。大致归纳有以下几点: ①继承View 实现一些不规则的图形,需要重写onDraw方法进行绘制。 ②继承ViewGroup 需要实现对于子控件的测量和布局。如果直接继承ViewGroup,记得重写onMeasure方法去测量子控件的大小,否则

zenmela2011的专栏 479

Android实现自定义的卫星式菜单(弧形菜单)详解

一、前言 Android 实现卫星式菜单也叫弧形菜单,主要要做的工作如下: 1.动画的处理 2.自定义ViewGroup来实现卫星式菜单View (1)自定义属性        a. 在attrs.xml中定义属性        b. 在布局中使用自定义属性        c. 在自定义View中读取布局文件中的自定义属性 (2)onMeasure 测量 child 即测量主按钮以及菜单项 (3)onLayout 布局 child 即布局主按钮以及菜单项 (4)设置主按钮的选择动画        a.为菜单项menuItem添加平移动画和旋转动画        b.实现菜

别再傻傻分不清了!一文搞懂电机里的‘旋变’和‘编码器’到底有啥区别

本文深度解析电机位置传感器中旋转变压器(旋变)与编码器的核心区别,包括工作原理、精度对比及环境适应性。通过实测数据和典型应用场景,帮助工程师在工业机器人、新能源汽车电机等关键领域做出精准选型决策,提升系统可靠性和控制精度。

weixin_28689507的博客 502

android 面试算法题 实现单链表反转(1),面试官问技术问题不太会怎么办

T行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!(5)反转后得到的链表最后一个结点是否为null?考虑完以上问题后,就能够写出正确的代码了。(2)假设链表为单节点链表,该怎样处理?(3)怎样防止在反转过程中断链?(4)反转后head是否更新?实现自定义链表反转类。

2401_84103675的博客 646

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

android自定义浮动菜单,Android实现自定义的卫星式菜单(弧形菜单)详解

一、前言Android 实现卫星式菜单也叫弧形菜单,主要要做的工作如下:1.动画的处理2.自定义ViewGroup来实现卫星式菜单View(1)自定义属性a. 在attrs.xml中定义属性b. 在布局中使用自定义属性c. 在自定义View中读取布局文件中的自定义属性(2)onMeasure测量 child即测量主按钮以及菜单项(3)onLayout布局 child即布局主按钮以及菜单项(4)设置...

weixin_30921875的博客 620

AD在建PCB封装时如何添加元器件的3D模型

3D模型

k1ang的博客 1万+

Simulink中通过MEX与MinGW实现C/C++结构体变量的高效导入

本文详细介绍了在Simulink中通过MEX工具链与MinGW编译器,高效导入C/C++结构体变量的完整流程。文章从需求背景出发,逐步讲解了MinGW环境配置、.h文件编写规范、核心导入命令Simulink.importExternalCTypes的使用,以及如何在MATLAB Function模块和总线创建器中调用自定义结构体,旨在实现模型与代码的无缝对齐,为后续仿真和代码生成奠定坚实基础。

weixin_29056781的博客 343

阿里平头哥与华为芯片的比较

阿里平头哥与华为芯片代表了中国AI芯片领域的两种典型发展路径:平头哥通过兼容CUDA生态快速切入市场,以较低成本提供接近国际水平的AI算力;华为则坚持全栈自研路线,构建从芯片到框架的完整技术体系,更注重供应链安全和自主可控。从短期来看,平头哥PPU在单卡性能参数上全面超越昇腾910B,接近英伟达H20水平,且成本优势明显,有望在云服务和互联网应用领域取得更大市场份额。而华为昇腾则凭借全栈自研和端边云协同优势,在政企市场和科研领域更具竞争力。

shao.bing的专栏 3976

android自定义弧形,Android 自定义弧形旋转菜单栏——卫星菜单

概述现在很多App会在入口比较浅的页面添加一些快捷操作入口,一方面是为了方便用户操作,一方面是为了提高产品一些关键入口的使用率,让用户能够在浏览信息流的过程中能快速切换至其他一些功能页面。例如豆瓣的首页 (右下角红框选中部分):豆瓣菜单本文将仿照这种菜单效果进行实现,最终效果如下:弧形菜单效果图需要定制的特性1.菜单展开半径2.设置菜单主按钮Icon3.设置菜单子项的各个Icon4.展开和收缩的动...

weixin_31749595的博客 753

戴尔PowerEdge服务器R450 RAID配置步骤

戴尔PowerEdge服务器R450 RAID配置步骤

且听风呤tmj的博客 6910

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4308

Android UI之半圆式卫星菜单(无动画)

飞夜羽博客从今天起,正式启动了,欢迎大家关注,多多捧场!以后会写一些在项目中遇到的难题以及解决方案,不会仅仅局限在知识方面

MoFiKing的博客 1442

2025.05.28【读书笔记】|如何用SILVA和RFAM数据库高效去除rRNA污染

摘要: 在Ribo-seq等测序数据分析中,清除rRNA污染对结果准确性至关重要。仅使用SILVA数据库可能遗漏5S rRNA污染,建议结合RFAM数据库(特别是RF00001家族)全面清除。操作要点包括:下载两库序列、将RNA碱基U替换为DNA的T、合并序列建立索引,使用bowtie2过滤rRNA reads。注意U/T转换是关键,否则会导致比对失败。该方法能有效提升数据清洁度,为后续分析奠定基础。

980

Android 实现自定义的卫星式菜单

Android 实现卫星式菜单也叫弧形菜单的主要要做的工作如下:1.动画的处理2.自定义ViewGroup来实现卫星式菜单View(1)自定义属性a. 在attrs.xml中定义属性b. 在布局中使用自定义属性c. 在自定义View中读取布局文件中的自定义属性(2)onMeasure 测量 child 即测量主按钮以及菜单项(3)onLayout 布局 child 即布局主按钮以及菜单项(4)设置主

Daisy_ruo的博客 1431

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

一行代码搞定Android弧形卫星动画菜单(附Demo)

特性: 支持上下左右四个方向展开弧形菜单 支持扩展菜单,理论上多少个子菜单都可以 支持自定义菜单图标和子菜单图标 支持自定义菜单弹出的圆弧半径 支持设置菜单按钮和子菜单按钮大小 支持是否显示子菜单文字 效果图:使用compile 'csy.menu.satellitemenulib:SatelliteMenu:1.0.3'使用介绍: xml属性 描述 值 radius 圆弧直径

3520

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 自定义实现卫星菜单

视频教程传送门:http://www.imooc.com/learn/300 一。首先,设置自定义属性 在res的attr.xml中设置属性 &lt;resources&gt; &lt;attr name="position"&gt; &lt;enum name="left_top" value="0" /&gt; &lt;enum name

qq_35820350的博客 722

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android实现仿卫星式动画菜单

Android实现仿卫星式菜单

SKY_L的博客 553

Android自定义VIew之实现卫星菜单效果

一  概述: 最近一直致力于android自定义VIew的学习,主要在看《android群英传》,还有优快云博客鸿洋大神和wing大神的一些文章,写的很详细,自己心血来潮,学着写了个实现了类似卫星效果的一个自定义的View,分享到博客上,望各位指点一二。写的比较粗糙,见谅。(因为是在linux系统下写的,效果图我直接用手机拍的,难看,大家讲究下就看个效果,勿喷)。 先来看个效果图,有点不忍直

wolf艺术人生 1481

Android动画之属性动画Animator详解(卫星菜单)

今天详细看了一下Android属性动画,然后做了一个网上比较火的卫星菜单的demo,下面介绍一下卫星菜单的制作方法

jl_stone的博客 1179

android 扇形菜单动画,Android — 自定义扇形展开卫星菜单控件

自定义属性文件 attrs.xmlattr 代表属性,name 为属性的名称enum 为枚举类型,也就是说该属性有 enum 这些值可选declare 是对属性的声明,使得其可以在 XML 的命名空间中使用styleable 是指这个属性可以调用 style 或 theme 来作为 XML 属性的值在布局文件中使用xmlns:app="http://schemas.android.com/apk/...

weixin_39792393的博客 240
上一篇: android studio 中使用 OSC Git
下一篇: Android软件开发之获取通讯录联系人信息
code_dream_wq
博客等级 码龄10年 51粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值