zoukankan      html  css  js  c++  java
  • 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里即可

    1. <!--半透明背景Theme--> 
    2.    <style name="BottomViewTheme_Defalut"> 
    3.         <item name="android:windowFrame">@null</item> 
    4.         <item name="android:windowContentOverlay">@null</item> 
    5.         <item name="android:windowIsFloating">true</item> 
    6.         <item name="android:windowIsTranslucent">false</item> 
    7.         <item name="android:windowNoTitle">true</item> 
    8.         <item name="android:windowBackground">@color/white</item> 
    9.         <item name="android:backgroundDimEnabled">true</item> 
    10.         <item name="android:windowFullscreen">true</item> 
    11.     </style> 
    12. <!--透明背景Theme--> 
    13.     <style name="BottomViewTheme_Transparent"> 
    14.         <item name="android:windowFrame">@null</item> 
    15.         <item name="android:windowIsFloating">true</item> 
    16.         <!-- Transparent --> 
    17.         <item name="android:windowIsTranslucent">false</item> 
    18.         <item name="android:windowContentOverlay">@null</item> 
    19.         <item name="android:windowNoTitle">true</item> 
    20.         <item name="android:windowBackground">@color/white</item> 
    21.         <item name="android:backgroundDimEnabled">false</item> 
    22.     </style>
    复制代码

    另外如果提示

    1. <item name="android:windowBackground">@color/white</item>
    复制代码

    这里的white找不到的话,说明你项目res/values/color.xml没有新建或者没有white颜色这个值,只需在res/values/color.xml里添加

    1.      <color name="white">#ffffff</color>
    复制代码

    这个白色值即可。

    另外View的动画Theme可选,建议也复制进去,效果好一些,代码如下:

    1. <font color="#333333"><font face="Arial"> <style name="BottomToTopAnim" parent="android:Animation"> 
    2.         <item name="@android:windowEnterAnimation">@anim/bottomview_anim_enter</item> 
    3.         <item name="@android:windowExitAnimation">@anim/bottomview_anim_exit</item> 
    4.     </style></font></font>
    复制代码

    res/anim/bottomview_anim_enter.xml

    1. <?xml version="1.0" encoding="utf-8"?> 
    2. <set xmlns:android="http://schemas.android.com/apk/res/android" > 
    3.     <translate 
    4.         android:duration="500" 
    5.         android:fromYDelta="100%p" /> 
    6. </set>
    复制代码

    res/anim/bottomview_anim_exit.xml

    1. <?xml version="1.0" encoding="utf-8"?> 
    2. <set xmlns:android="http://schemas.android.com/apk/res/android" > 
    3.     <translate 
    4.         android:duration="500" 
    5.         android:toYDelta="100%p" /> 
    6. </set>
    复制代码

    整体为:

    2、部分核心使用代码:

    1. BottomView bottomView = new BottomView(this, 
    2.                                         R.style.BottomViewTheme_Defalut, R.layout.bottom_view); 
    3.                         bottomView.setAnimation(R.style.BottomToTopAnim);//设置动画,可选 
    4.                         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();
      }
    } 
  • 相关阅读:
    eureka流程图
    Feign和Ribbon的重试机制
    idea编译kafka 2.6 源码
    Feign的调用流程
    FeignClientFactoryBean创建动态代理
    Feign源码的入口
    Ribbon的检查服务
    Ribbon是怎么和Eureka整合的?
    Eureka过期
    backup: sqlHelper --cSharp
  • 原文地址:https://www.cnblogs.com/exmyth/p/4579227.html
Copyright © 2011-2022 走看看