热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android高手进阶教程(二十六)之---Android超仿Path菜单的功能实现!

本篇文章主要主要介绍了Android超仿Path菜单的功能实现,现在分享给大家,也给大家做个参考。感兴趣的可以了解一下。

Hi~大家好,出来创业快3个月了,一切还不错,前一段时间用了业余时间搞了个问答类网站YQMA.想做中国的stackoverflow,哈哈,只是YY下,希望大家多多支持!

好了,今天给大家分享的是Path菜单的简单实现,可以支持自定义方向(左上,右上,右下,左下),并且可以自定义菜单的个数,难点就是菜单的摆放位置(动态设置margin),还有动画的实现,其实动画只是简单用了个TranslateAnimation,N个菜单一起移动的时候感觉很cool~

这里也用到了自定义标签,这里不懂的童鞋可以看我 Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用! 这篇文章.好了废话不多说了,

首先创建一个android工程命名为PathTest.目录结构如下图:

第二步:在values文件夹下新建一个attrs.xml文件,代码如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
 
    
      
       
       
       
       
     
    
 

第三步:新建一个PathMenuView.Java这个就是我们自定义的Path菜单控件,代码如下:

package com.tutor.path; 
 
import androidcontentContext; 
import androidcontentresTypedArray; 
import androidutilAttributeSet; 
import androidviewGravity; 
import androidviewView; 
import androidviewViewGroup; 
import androidviewanimationAnimation; 
import androidviewanimationAnticipateInterpolator; 
import androidviewanimationOvershootInterpolator; 
import androidviewanimationTranslateAnimation; 
import androidwidgetFrameLayout; 
import androidwidgetImageView; 
 
 
/** 
 * @author frankiewei 
 * 超级仿path菜单 
 * position定义菜单的位置,目前支持:左上;右上;右下;左下四个方向。 
 * menuResIds定义出现的菜单的资源ID 
 */ 
public class PathMenuView extends FrameLayout { 
   
  private static final int LEFT_TOP = 0; 
   
  private static final int RIGHT_TOP = 1; 
   
  private static final int RIGHT_BOTTOM = 2; 
   
  private static final int LEFT_BOTTOM = 3; 
   
   
  /** 
   * 默认的位置是在右下角 
   */ 
  private int position = 3; 
   
  /** 
   * 那个圆形菜单 
   */ 
  private ImageView mHome; 
   
  /** 
   * 上下文 
   */ 
  private Context mContext; 
   
   
  /** 
   * 设备的宽度 
   */ 
  private int mWIDTH = 0; 
   
  /** 
   * 设备的高度 
   */ 
  private int mHEIGHT = 0; 
   
  /** 
   * 设备的density 
   */ 
  private float mDensity; 
   
  /** 
   * 菜单是否显示 
   */ 
  private boolean bMenuShow; 
   
  private static int xOffset   = 15; 
  private static int yOffset   = -13; 
   
  /** 
   * 菜单的资源个数 
   */ 
  private int[] menuResIds = {Rdrawablecomposer_camera,Rdrawablecomposer_music, 
      Rdrawablecomposer_sleep,Rdrawablecomposer_music,Rdrawablecomposer_place}; 
   
 
  public PathMenuView(Context context){ 
    super(context); 
    setupViews(); 
  } 
   
  public PathMenuView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    TypedArray a = contextobtainStyledAttributes(attrs,  
        RstyleablePathMenuView); 
     
    position = agetInt(RstyleablePathMenuView_position,3); 
     
    arecycle(); 
    setupViews(); 
  } 
   
  private void setupViews(){ 
    mCOntext= getContext(); 
 
    mHEIGHT = mContextgetResources()getDisplayMetrics()heightPixels; 
    mWIDTH = mContextgetResources()getDisplayMetrics()widthPixels; 
    mDensity = mContextgetResources()getDisplayMetrics()density; 
     
    xOffset = (int) (667 * mDensity); 
    yOffset = (int) (667 * mDensity); 
     
    mHome = new ImageView(mContext); 
     
    mHomesetImageResource(Rdrawablecomposer_button); 
    mHomesetOnClickListener(listener); 
     
    addView(mHome); 
     
    LayoutParams mHomeparams = (FrameLayoutLayoutParams)mHomegetLayoutParams(); 
    mHomeparamswidth = LayoutParamsWRAP_CONTENT; 
    mHomeparamsheight = LayoutParamsWRAP_CONTENT; 
     
    switch (position) { 
    case LEFT_TOP: 
      mHomeparamsgravity = GravityLEFT | GravityTOP; 
      for (int i = 0; i 

第四步:PathTestActivity.java以及用到的布局文件main.xml代码如下:

PathTestActivity.java(基本没修改代码)代码如下:

package comtutorpath; 
 
import androidappActivity; 
import androidosBundle; 
 
public class PathTestActivity extends Activity { 
 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    superonCreate(savedInstanceState); 
    setContentView(Rlayoutmain);   
  } 
} 

main.xml代码如下:

<&#63;xml version="0" encoding="utf-8"&#63;> 
 
 
   
 
 

运行点击效果如下:

图1:默认是在右下方这里menuResIds定义了五个菜单              


图2:点击红色菜单,菜单收回.

下面我们修改main.xml的tutor属性为left_bottom,并且修改PathMenuView.java中的menuResIds.

tutor:position="left_bottom" 

效果如下:

图3:自定义在左下角,六个菜单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了在使用MSXML解析XML文件时出现DTD禁用问题的解决方案。通过代码示例和错误信息获取方法,解释了默认情况下DTD是禁用的,以及如何启用DTD的方法。此外,还提到了网上关于该问题的信息相对较少,因此本文提供了解决方案以供参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
瀡訫飛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有