AndroidUI开源组件库BottomView 第三方自定义UI控件
这里分享一个Android的非常经典实用而且简单方便的第三方UI控件库:BottomView(小米的米UI也用到了这个)
原文 http://blog.csdn.net/opzoonzhuzhengke/article/details/35230819
实现功能:
可以在底部弹出的View里自定义布局;
可以自定义是否可以触摸外部消失;
可以自定义事件;
可以自定义外围背景是否透明;
可以自定义动画;
如果需要的话,可以强制为顶部View显示
BottomView.jar库文件下载地址:http://download.csdn.net/detail/jay100500/7547055
BottomView的Demo下载地址:http://download.csdn.net/detail/jay100500/7547049
其实原理就是WindowManager Dialog 和Animation的组合
这里分享一个Android的非常经典实用而且简单方便的第三方UI控件库:BottomView(小米的米UI也用到了这个)
实现功能:
可以在底部弹出的View里自定义布局;
可以自定义是否可以触摸外部消失;
可以自定义事件;
可以自定义外围背景是否透明;
可以自定义动画;
如果需要的话,可以强制为顶部View显示
用法:
1、下载BottomView.jar库文件,放到Android项目工程里的libs里
2、设置BottomView的Theme:
这2个Theme复制粘贴到你的项目的res/values/styles.xml里即可
- <!--半透明背景Theme-->
- <style name="BottomViewTheme_Defalut">
- <item name="android:windowFrame">@null</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowIsFloating">true</item>
- <item name="android:windowIsTranslucent">false</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowBackground">@color/white</item>
- <item name="android:backgroundDimEnabled">true</item>
- <item name="android:windowFullscreen">true</item>
- </style>
- <!--透明背景Theme-->
- <style name="BottomViewTheme_Transparent">
- <item name="android:windowFrame">@null</item>
- <item name="android:windowIsFloating">true</item>
- <!-- Transparent -->
- <item name="android:windowIsTranslucent">false</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowNoTitle">true</item>
- <item name="android:windowBackground">@color/white</item>
- <item name="android:backgroundDimEnabled">false</item>
- </style>
复制代码
另外如果提示
- <item name="android:windowBackground">@color/white</item>
复制代码
这里的white找不到的话,说明你项目res/values/color.xml没有新建或者没有white颜色这个值,只需在res/values/color.xml里添加
- <color name="white">#ffffff</color>
复制代码
这个白色值即可。
另外View的动画Theme可选,建议也复制进去,效果好一些,代码如下:
- <font color="#333333"><font face="Arial"> <style name="BottomToTopAnim" parent="android:Animation">
- <item name="@android:windowEnterAnimation">@anim/bottomview_anim_enter</item>
- <item name="@android:windowExitAnimation">@anim/bottomview_anim_exit</item>
- </style></font></font>
复制代码
res/anim/bottomview_anim_enter.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" >
- <translate
- android:duration="500"
- android:fromYDelta="100%p" />
- </set>
复制代码
res/anim/bottomview_anim_exit.xml
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android" >
- <translate
- android:duration="500"
- android:toYDelta="100%p" />
- </set>
复制代码
整体为:
2、部分核心使用代码:
- BottomView bottomView = new BottomView(this,
- R.style.BottomViewTheme_Defalut, R.layout.bottom_view);
- bottomView.setAnimation(R.style.BottomToTopAnim);//设置动画,可选
- bottomView.showBottomView(false);
复制代码
如果想获取这个View的话,调用.getView()方法即可。
效果图之一:(可随意发挥)
以下是源代码“:
package com.tandong.bottomview; import java.util.ArrayList; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView; import com.tandong.bottomview.adapter.BVAdapter;
import com.tandong.bottomview.view.BottomView; /**
* BottomView
*
* www.aplesson.com
*
* @author TanDong
*
*/ public class MainActivity extends Activity implements OnClickListener {
private Button btn_show;
private ListView lv_menu_list;
private ArrayList<String> menus;
private BottomView bottomView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
initData(); } private void initData() {
menus = new ArrayList<String>();
menus.add(getResources().getString(R.string.menu_search));
menus.add(getResources().getString(R.string.menu_filemanage));
menus.add(getResources().getString(R.string.menu_downloadmanage));
menus.add(getResources().getString(R.string.menu_setting));
menus.add(getResources().getString(R.string.menu_about)); } private void initView() {
btn_show = (Button) this.findViewById(R.id.btn_show);
btn_show.setOnClickListener(this);
} @Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.btn_show:
bottomView = new BottomView(MainActivity.this,
R.style.BottomViewTheme_Defalut, R.layout.bottom_view);
bottomView.setAnimation(R.style.BottomToTopAnim); bottomView.showBottomView(false);
lv_menu_list = (ListView) bottomView.getView().findViewById(
R.id.lv_list);
BVAdapter adapter = new BVAdapter(MainActivity.this, menus);
lv_menu_list.setAdapter(adapter);
lv_menu_list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
bottomView.dismissBottomView(); }
});
break; default:
break;
}
} }
package com.tandong.bottomview.adapter; import java.util.ArrayList; import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; import com.tandong.bottomview.R; /**
* BottomView
*
* @author TanDong
*
*/
public class BVAdapter extends BaseAdapter {
private Context c;
private ArrayList<String> alss; public BVAdapter(Context context, ArrayList<String> als) {
this.c = context;
this.alss = als;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return alss.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return alss.get(arg0);
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public View getView(int position, View convertView, ViewGroup arg2) {
convertView = View.inflate(c, R.layout.item, null);
TextView tv = (TextView) convertView.findViewById(R.id.tv_name);
tv.setText(alss.get(position));
return convertView;
} }
原理:
package com.tandong.bottomview.view; import android.app.Dialog;
import android.content.Context;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams; public class BottomView
{
private View convertView;
private Context context;
private int theme;
private Dialog bv;
private int animationStyle;
private boolean isTop = false; public BottomView(Context c, int theme, View convertView)
{
this.theme = theme;
this.context = c;
this.convertView = convertView;
} public BottomView(Context c, int theme, int resource) {
this.theme = theme;
this.context = c;
this.convertView = View.inflate(c, resource, null);
} public void showBottomView(boolean CanceledOnTouchOutside) {
if (this.theme == 0)
this.bv = new Dialog(this.context);
else
this.bv = new Dialog(this.context, this.theme); this.bv.setCanceledOnTouchOutside(CanceledOnTouchOutside);
this.bv.getWindow().requestFeature(1);
this.bv.setContentView(this.convertView);
Window wm = this.bv.getWindow();
WindowManager m = wm.getWindowManager();
Display d = m.getDefaultDisplay();
WindowManager.LayoutParams p = wm.getAttributes();
p.width = (d.getWidth() * 1);
if (this.isTop)
p.gravity = 48;
else
p.gravity = 80; if (this.animationStyle != 0)
{
wm.setWindowAnimations(this.animationStyle);
}
wm.setAttributes(p);
this.bv.show();
} public void setTopIfNecessary() {
this.isTop = true;
} public void setAnimation(int animationStyle) {
this.animationStyle = animationStyle;
} public View getView() {
return this.convertView;
} public void dismissBottomView() {
if (this.bv != null)
this.bv.dismiss();
}
}
AndroidUI开源组件库BottomView 第三方自定义UI控件的更多相关文章
- Android 开源组件 ----- Android LoopView无限自动轮转控件
Android 开源组件 ----- Android LoopView无限自动轮转控件 2015-12-28 15:26 by 杰瑞教育, 32 阅读, 0 评论, 收藏, 编辑 一.组件介绍 App ...
- cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug
其实总体自定义UI组件都比较简单,尤其是cocos2d-js是开源的,如果有什么不明白的直接看js代码或者C++代码即可.当然js代码基本就够了. 另外,js的ctor函数虽然说是构造函数,但毕竟不是 ...
- WPF 自定义UI控件学习
最近项目中运用到了WPF处理三维软件,在C/S结构中WPF做UI还是有很多优越性,简单的学了一点WPF知识,成功的完成项目目标.项目过度阶段对于WPF的一些基本特点有了进一步了解 .至此花费一点时间研 ...
- [js开源组件开发]js手机端浮层控件,并有多种弹出小提示,兼容pc端浏览器
js dialog组件,包含alert和confirm的实现 本组件所有的资源均在github上可以查看源代码 GitHub 本dialog的组件的例子请在这里查看 demo dialog js di ...
- [js开源组件开发]js多选日期控件
js多选日期控件 详情请见:http://www.lovewebgames.com/jsmodule/calendar.html 它的github地址:https://github.com/tianx ...
- iOS开发UI篇—Quartz2D(自定义UIImageView控件)
iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...
- 面试题汇总--数据储存/应用程序/UI控件/客户端的安全性与框架处理。。。
一 数据储存 1.如果后期需要增加数据库中的字段怎么实现,如果不使用 CoreData 呢?编写 SQL 语句来操作原来表中的字段1)增加表字段ALTER TABLE 表名 ADD COLUMN 字 ...
- UI控件初始化问题:initWithFrame和initWithCoder、aweakFromNib的执行
在iOS学习和程序开发过程中,我们经常会遇到一些自定义UI控件或控制器在初始化时出现问题,尤其在大家刚开始接触时,几种初始化方法的作用以及调用的时机往往容易混淆,这也跟我们对iOS程序设计中,类的创建 ...
- GearCase UI - 自己构建一套基于 Vue 的简易开源组件库
最近 1 ~ 2 月除了开发小程序之外,还一直在继续深入的学习 Vuejs.利用零碎.闲暇的时间整合了一套基于 Vue 的 UI 组件库.命名为 GearCase UI,意为齿轮盒.现在把该项目进行开 ...
随机推荐
- noip 2009 道路游戏
/*10分钟的暴力 意料之中的5分..*/ #include<iostream> #include<cstdio> #include<cstring> #defin ...
- MVC4建立DBContext的EF6数据
MVC4建立DBContext的EF6数据时 1.需要using System.Data.Entity;命名空间 2.此命名空间需要安装EntityFromwork.dll,此dll可以在项目——&g ...
- SQL 去除小数点后无效 0 的方法
select convert(float,10.0000) 就是这么简单
- php调试mysql信息。
print_r(mysql_error());会返回执行myql的成功或者失败的信息.数据库的编码方式是UTF-8.获取手机号,返回的页面的编码是gb2312.需要转换
- CentOs上搭建git服务器
CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...
- Android 如何调用自写APK和非自写APK
由于项目需要,调用一个现成的APK,总结之余,顺便把怎么调用自写APK的方法也写上,以做比较 1.如何调用现成的APK: 先上调用代码,然后再一一解释: Intent mIntent = new In ...
- MSSQL 查询统计某状态出现的次数及累计时间
1.问题来源 最近客户需要统计某个设备,某状态,在某一个时间段内出现的次数,并计算累计出现的时间. 数据源如下: 现在如果要统计UPSCTSTA状态为D出现的次数(同一状态,连续出现的认为是一次),并 ...
- ArcMap - 使用python更新列中的值
概述:在外文网上,很多人都问在ArcMap中如何通过SQL修改属性字段的值,我见回答的人都说通过"Field Calculator",貌似不能直接通过SQL语句. 虽然学gis开发 ...
- 电厂MIS,SIS简介
MIS(Management Information System)管理信息系统,主要指的是进行日常事务操作的系统,它使管理人员及时了解公司现状和各种消息,它是电力企业管理现代化的重要标志. 一个典型 ...
- css布局之三栏布局
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...