精华内容
下载资源
问答
  • 短信智能管理器

    2014-01-23 14:41:44
    项目名称:智能短信分类管理器 短信-专业术语是会话 建议不去找与服务器打交道的APP,这个前景不是很看好,建议做手机定制之类的。 布局上用到了TabHost选项卡 TabHost的ID应该为@android:id/ta


    培训机构:传智播客


    讲师:李科


    时间:3天


    模块:搜索,收藏,按日期来进行分隔或按abcf这些字母进行分隔


    项目名称:智能短信分类管理器


    短信-专业术语是会话


    建议不去找与服务器打交道的APP,这个前景不是很看好,建议做手机定制之类的。


    布局上用到了TabHost选项卡

    TabHost的ID应该为@android:id/tabhos

    TabWidget的ID应该为@android:id/tabs

    FrameLayout的ID应该为@android:id/tabcontent




    展开全文
  • 智能短信分类管理器

    千次阅读 2013-11-24 11:37:21
    智能短信分类管理 周末在家学习了一下传智播客...短信智能管理器(应用源码级开发): 功能描述:1 会话列表 2 文件夹视图 3 群组 4 新建信息 5 提供了短息搜索机制 1 会话列表 :  通过异步查询获取会话数据,不会导

                                                                                           智能短信分类管理器

    周末在家学习了一下传智播客的智能短信系统  这个项目是lenovo和td(移动合作的)一个项目,采用的风格是白色主题,属于手机的定制项目 今天将这个项目和大家一起分享!

    项目简介和功能描述

    短信智能管理器(应用源码级开发):
    功能描述:1 会话列表  2 文件夹视图 3 群组 4 新建信息 5 提供了短息搜索机制
    1 会话列表 :
     通过异步查询获取会话数据,不会导致anr异常,对于会话可以进行单条和多条的删除,查看会话详情,我们在对listView进行了优化
    2 文件夹视图:
      对信息进行了分类管理:收件箱 发件箱 已发送 草稿箱这四类,并且我们对信息进行了日期分隔显示。
    3 群组:
      创建了群组数据库,里面有两张表:groups和thread_groups,groups是用来存放群组的。
    4 新建信息
      号码的输入控件采用的是AutoCompelteTextView.透析filter的过滤机制。
    5 提供了短息搜索机制
      应用能在应用的内部任何一个activity进行搜索,并且支持全局搜索。

    页面显示:

                                                                               主页面

    查询短信的数据  如果直接查询,就是在主线程进行的,可以采用android提供的异步框架,使用范围:只能去访问我们的ContentProvider所提供的数据  下面来说说这个异步查询的框架吧!




    源码下载地址:http://download.csdn.net/detail/wangliang198901/6601521

    展开全文
  • Android 应用响应智能电视遥控

    千次阅读 2018-11-08 20:34:04
    由于最近的项目需要运行在安卓智能电视上,除了正常的功能开发外,为了操作方便还需要对遥控进行支持。这里记录对遥控支持的主要思路。 原理支持 Android设备对遥控的响应是通过分发KeyEvent的方式进行的,...

    前言

    由于最近的项目需要运行在安卓智能电视上,除了正常的功能开发外,为了操作方便还需要对遥控器进行支持。这里记录对遥控器支持的主要思路。

    原理支持

    Android设备对遥控器的响应是通过分发KeyEvent的方式进行的,体现在界面上是focus焦点在view间的移动等。

    因此,我们可以从两方面入手,一是拦截系统事件分发过程,二是借助系统提供的属性实现焦点移动。

    具体实现

    方案一

    拦截系统事件分发过程对相应的KeyEvent分别进行处理。这种方案需要自己记录焦点位置管理焦点的移动等。可以通过重写dispatchKeyEvent、onKeyUp、onKeyDown等实现系统事件拦截,实践证明dispatchKeyEvent最合适,它处在事件分发过程靠前的位置可以保证所有的事件都能接收到,而onKeyUp、onKeyDown有些按键(比如确认键)是接收不到的。

    示例代码

    	  @Override
    	  public boolean dispatchKeyEvent(KeyEvent event) {
    	        int keyCode = event.getKeyCode();
    	        int action = event.getAction();
    	        return handleKeyEvent(action, keyCode)||super.dispatchKeyEvent(event);
    	   }
    
    	 private boolean handleKeyEvent(int action, int keyCode) {
            if (action != KeyEvent.ACTION_DOWN)
                return false;
            switch (keyCode) {
                case KeyEvent.KEYCODE_ENTER:
                case KeyEvent.KEYCODE_DPAD_CENTER:
                  	... //确定键enter
                    break;
                case KeyEvent.KEYCODE_DPAD_DOWN:   
                	...//向下键
                  	break;
                case KeyEvent.KEYCODE_DPAD_UP:   
                	...//向上键
                    break;
                case KeyEvent.KEYCODE_DPAD_LEFT: 
                	...//向左键
                    break;
                case KeyEvent.KEYCODE_DPAD_RIGHT:  
                	...//向右键
                    break;
                default:
                    break;
            }
            return false;
        }
    
    

    焦点逻辑需要自己处理,突出焦点可以通过为view设置实现了多种state的selector-drawable作为背景来实现。这里要注意下,遥控器按下、松开会出发两次事件,这两个事件只处理一个就好,所以上面代码对action做了过滤

    if (action != KeyEvent.ACTION_DOWN){
    	return false; 
    }
    

    如果我们已经对事件做了处理要返回true通知系统事件已经被消费掉了不需要继续处理,如果不是我们感兴趣的事件要返回false让系统继续处理。另外确定键(OK键或者方向键中间按键)的处理建议采用模拟点击的方式,比如调用view的performClick方法,这样能让系统自己走touch该view的分发过程,达到思路最简单,代码最少的目的。

    该方案的好处是不管什么样的界面都可以通过代码控制,具有普适性。但是由于焦点控制需要自己维护逻辑可能相对复杂,如果界面不是通过代码生成而是相对固定的可以通过第二种方案来实现。

    方案二

    系统提供了一些焦点相关的属性,通过设置View的属性来实现焦点转移

    android:focusable:设置一个控件能否获得焦点
    android:background:设置作为背景的drawable实现焦点突出
    android:nextFocusDown:定义下一个获得焦点的控件当按下键时
    android:nextFocusUp:定义下一个获得焦点的控件当按上键时
    android:nextFocusLeft:定义下一个获得焦点的控件当按左键时
    android:nextFocusRight:定义下一个获得焦点的控件当按右键时
    

    如果界面相对固定,都是在xml文件中事先定义好的,可以通过上面的属性来实现遥控器按键的响应。这种方案不能保证所有view都能响应,实践证明,xml中设置无效的可以通过requestFocus强制设置一个焦点到指定的view。

    该方案不需要拦截事件分发过程,但要求界面固定,可以根据具体情况选择合适方案,个人推荐方案一。

    展开全文
  • 图层管理图层管理分为了基础底图切换和业务数据管理。基础底图主要是进行切换,而业务数据管理的功能因项目而已,基本有控制显示、图层查询、统计等。

    图层管理

    图层管理分为了基础底图切换和业务数据管理。基础底图主要是进行切换,而业务数据管理的功能因项目而已,基本有控制显示、图层查询、统计等。

    基础底图

    这里写图片描述

    基础底图的加载前面的章节已经介绍过,只需要从做好布局,处理ArcGISMap对象的Basemap切换即可。

    这里写图片描述

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:orientation="horizontal"
        android:layout_marginTop="@dimen/window_inner"
        android:layout_marginLeft="@dimen/window_inner"
        android:layout_marginRight="@dimen/window_inner">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center_vertical"
            android:orientation="vertical">
            <esrichina.hymn.Bootstrap.BootstrapThumbnail
                android:id="@+id/managerlayer_vector"
                app:bootstrapBrand="info"
                app:roundedCorners="true"
                android:layout_width="@dimen/basemap_layer_imagewidth"
                android:layout_height="@dimen/basemap_layer_imageheight"
                android:layout_gravity="center_horizontal|center_vertical"
                android:src="@drawable/ic_basemap_vector" />
            <esrichina.hymn.Bootstrap.BootstrapLabel
                app:bootstrapBrand="info"
                app:bootstrapHeading="h6"
                app:bootstrapText="{fa_globe}  矢量"
                app:showOutline="false"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_marginTop="@dimen/window_inner"
                android:clickable="false"
                android:textColor="@color/bootstrap_brand_info" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center_vertical"
            android:layout_marginLeft="@dimen/window_inner"
            android:orientation="vertical">
    
            <esrichina.hymn.Bootstrap.BootstrapThumbnail
                android:id="@+id/managerlayer_raster"
                android:layout_width="@dimen/basemap_layer_imagewidth"
                android:layout_height="@dimen/basemap_layer_imageheight"
                android:layout_gravity="center_horizontal|center_vertical"
                android:src="@drawable/ic_basemap_raster"
                app:bootstrapBrand="info"
                app:roundedCorners="true" />
    
            <esrichina.hymn.Bootstrap.BootstrapLabel
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_marginTop="@dimen/window_inner"
                android:clickable="false"
                android:textColor="@color/bootstrap_brand_info"
                app:bootstrapBrand="info"
                app:bootstrapHeading="h6"
                app:bootstrapText="{fa_globe}  影像"
                app:showOutline="false" />
        </LinearLayout>
    </LinearLayout>

    这里以只有矢量、影像两种地图为前提,制作布局文件,当然也可以有更多。

    这里写图片描述

    public void DisplayRasterBasemap() {
            this.mainArcGISMap.setBasemap(this.mainRasterBasemap);
            this.mainMapView.setMap(this.mainArcGISMap);
        }
    public void DisplayVectorBasemap() {
            this.mainArcGISMap.setBasemap(this.mainVectorBasemap);
            this.mainMapView.setMap(this.mainArcGISMap);
        }

    底图切换针对ArcGISMap对象,赋值新的Basemap对象,Basemap包含不同的底图图层。

    业务图层管理

    这里写图片描述

    这里写图片描述
    业务图层在一个项目中往往有比较多的数据,例如多个Feature Service、多个.geodatabase文件、多个mmpk文件。而.geodatabase和mmpk文件都可以包含多个图层。
    这里写图片描述

    此处以两个.geodatabase文件为例,介绍业务图层管理。由于文件解析都是异步处理,而多个文件的解析完成顺序不可控,需要等两个都解析完成后,再按照给定的文件上下顺序来得到图层列表。

    多图层数据解析

    这里写图片描述

    安卓的回调机制比较麻烦,寻找了一种最简单的方式,定义包含方法的接口,在OpenLayerClass类的OpenLayer方法执行完打开文件并解析出结果后,调用接口中的方法getLayer。
    实例化OpenLayerClass时,给出getLayer的具体内容。

    IlayerResult.java文件:

    package esrichina.hymn.OpenLayers;
    
    /**
     * Created by HymnHan on 2017/5/15.
     */
    
    public interface ILayerResult {
        public void getLayer();
    }

    LayerType.java文件:

    package esrichina.hymn.OpenLayers;
    
    /**
     * Created by HymnHan on 2017/5/15.
     */
    
    public enum LayerType {
        FILE_TPK,
        FILE_VTPK,
        FILE_GEODATABASE,
        FILE_MMPK_BASEMAP,
        FILE_MMPK_OPERATIONALLAYER,
        URL_VTPK,
        URL_MAPSERVICECACHE,
        URL_FEATURESERVICE,
        URL_MAPSERVICENOCACHE
    }

    OpenLayerClass.java文件:

    package esrichina.hymn.OpenLayers;
    
    import com.esri.arcgisruntime.data.Geodatabase;
    import com.esri.arcgisruntime.data.GeodatabaseFeatureTable;
    import com.esri.arcgisruntime.data.ServiceFeatureTable;
    import com.esri.arcgisruntime.data.TileCache;
    import com.esri.arcgisruntime.layers.ArcGISMapImageLayer;
    import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
    import com.esri.arcgisruntime.layers.ArcGISVectorTiledLayer;
    import com.esri.arcgisruntime.layers.FeatureLayer;
    import com.esri.arcgisruntime.layers.Layer;
    import com.esri.arcgisruntime.mapping.ArcGISMap;
    import com.esri.arcgisruntime.mapping.Basemap;
    import com.esri.arcgisruntime.mapping.LayerList;
    import com.esri.arcgisruntime.mapping.MobileMapPackage;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by HymnHan on 2017/5/10.
     */
    
    public class OpenLayerClass {
        protected ILayerResult mainLayerReturn;
    
        protected ArrayList<Layer> mainLayerResult;
        public String url;
        public void OpenLayer(String urlOrPath,LayerType layerType,ILayerResult layerReturn)
        {
            mainLayerResult = new ArrayList<>();
            this.mainLayerReturn = layerReturn;
            url = urlOrPath;
            switch (layerType)
            {
                case FILE_TPK:
                    TileCache vTileCache = new TileCache(urlOrPath);
                    ArcGISTiledLayer mainArcGISTiledLayer = new ArcGISTiledLayer(vTileCache);
                    mainLayerResult.add(mainArcGISTiledLayer);
                    mainLayerReturn.getLayer();
                    break;
                case FILE_VTPK:
                case URL_VTPK:
                    ArcGISVectorTiledLayer mainArcGISVectorTiledLayer = new ArcGISVectorTiledLayer(urlOrPath);
                    mainLayerResult.add(mainArcGISVectorTiledLayer);
                    mainLayerReturn.getLayer();
                    break;
                case FILE_GEODATABASE:
                    final Geodatabase mainGeodatabase = new Geodatabase(urlOrPath);
                    mainGeodatabase.loadAsync();
                    mainGeodatabase.addDoneLoadingListener(new Runnable() {
                        @Override
                        public void run() {
                            List<GeodatabaseFeatureTable> results = mainGeodatabase.getGeodatabaseFeatureTables();
                            for (GeodatabaseFeatureTable value : results
                                    ) {
                                FeatureLayer valueFL = new FeatureLayer(value);
                                mainLayerResult.add(valueFL);
                            }
                            mainLayerReturn.getLayer();
                        }
                    });
                    break;
                case FILE_MMPK_BASEMAP:
                    final MobileMapPackage mainMobileMapPackageB =
                            new MobileMapPackage(urlOrPath);
                    mainMobileMapPackageB.loadAsync();
                    mainMobileMapPackageB.addDoneLoadingListener(new Runnable() {
                        @Override
                        public void run() {
                            List<ArcGISMap> mainArcGISMapL = mainMobileMapPackageB.getMaps();
                            for (ArcGISMap mainArcGISMap : mainArcGISMapL
                                 ) {
                                Basemap mainBasemap = mainArcGISMap.getBasemap();
                                LayerList mainBaseLayers = mainBasemap.getBaseLayers();
                                for (Layer mainLayer : mainBaseLayers
                                     ) {
                                    mainLayerResult.add(mainLayer);
                                }
                                for (int i = mainBaseLayers.size(); i > -1; i--) {
                                    mainBasemap.getBaseLayers().remove(i);
                                }
                            }
                            mainLayerReturn.getLayer();
                        }
                    });
                    break;
                case FILE_MMPK_OPERATIONALLAYER:
                    final MobileMapPackage mainMobileMapPackageO =
                            new MobileMapPackage(urlOrPath);
                    mainMobileMapPackageO.loadAsync();
                    mainMobileMapPackageO.addDoneLoadingListener(new Runnable() {
                        @Override
                        public void run() {
                            List<ArcGISMap> mainArcGISMapL = mainMobileMapPackageO.getMaps();
                            for (ArcGISMap mainArcGISMap : mainArcGISMapL
                                    ) {
                                LayerList mainMMPKLL = mainArcGISMap.getOperationalLayers();
                                for (Layer mainLayer : mainMMPKLL
                                        ) {
                                    mainLayerResult.add(mainLayer);
                                }
                                for (int i = mainMMPKLL.size(); i > -1; i--) {
                                    mainArcGISMap.getOperationalLayers().remove(i);
                                }
                            }
                            mainLayerReturn.getLayer();
                        }
                    });
                    break;
                case URL_MAPSERVICECACHE:
                    ArcGISTiledLayer mainArcGISTiledLayerURL = new ArcGISTiledLayer(urlOrPath);
                    mainLayerResult.add(mainArcGISTiledLayerURL);
                    mainLayerReturn.getLayer();
                    break;
                case URL_FEATURESERVICE:
                    final ServiceFeatureTable mainServiceFeatureTable = new ServiceFeatureTable(urlOrPath);
                    FeatureLayer mainFeatureLayer = new FeatureLayer(mainServiceFeatureTable);
                    mainLayerResult.add(mainFeatureLayer);
                    mainLayerReturn.getLayer();
                    break;
                case URL_MAPSERVICENOCACHE:
                    ArcGISMapImageLayer mainMapImageLayer = new ArcGISMapImageLayer(urlOrPath);
                    mainLayerResult.add(mainMapImageLayer);
                    mainLayerReturn.getLayer();
                    break;
            }
    
        }
    
        public ArrayList<Layer> getLayerResult() {
            return mainLayerResult;
        }
    }

    OpenLayersClass.java文件:

    package esrichina.hymn.OpenLayers;
    
    import com.esri.arcgisruntime.layers.Layer;
    
    import java.util.ArrayList;
    
    /**
     * Created by polyl on 2017/5/15.
     */
    
    public class OpenLayersClass {
        protected ILayerResult mainLayerReturn;
    
        protected ArrayList<Layer> mainLayerResult;
        private int TotalCount = 0;
        private int LoadedCount = 0;
        private String[] urls;
        private ArrayList<OpenLayerClass> ResultOpenClass;
        public void OpenLayers(String[] urlOrPaths, LayerType layerType, ILayerResult layerReturn)
        {
            try {
                urls = urlOrPaths;
                TotalCount = urlOrPaths.length;
                this.mainLayerReturn = layerReturn;
                mainLayerResult = new ArrayList<>();
                ResultOpenClass = new ArrayList<>();
                for (int i = urlOrPaths.length-1; i > -1; i--) {
                    String urlOrPath = urlOrPaths[i];
                    final OpenLayerClass openLayer = new OpenLayerClass();
                    openLayer.OpenLayer(
                            urlOrPath,
                            layerType,
                            new ILayerResult() {
                                @Override
                                public void getLayer() {
                                    ResultOpenClass.add(openLayer);
    
                                    LoadedCount++;
                                    if(LoadedCount == TotalCount)
                                    {
                                        for (int j = 0; j < urls.length; j++) {
                                            for (OpenLayerClass result:ResultOpenClass
                                                 ) {
                                                if(urls[j].equals(result.url))
                                                {
                                                    mainLayerResult.addAll(result.getLayerResult());
                                                }
                                            }
                                        }
                                        mainLayerReturn.getLayer();
                                    }
                                }
                            }
                    );
                }
            }
            catch (Exception e)
            {
                Exception ee = e;
            }
        }
        public ArrayList<Layer> getLayerResult() {
            return mainLayerResult;
        }
    
    }

    制作图层列表布局文件

    这里写图片描述

    业务图层采用ListView来展示。依托LinearLayout,包含main_map_basemapmanager_container布局文件。

    main_map_basemapmanager_container文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <esrichina.hymn.Bootstrap.BootstrapButton
            android:layout_width="match_parent"
            android:layout_height="@dimen/window_header_height"
            android:layout_marginTop="@dimen/window_inner"
            android:layout_marginLeft="@dimen/window_inner"
            android:layout_marginRight="@dimen/window_inner"
            android:clickable="false"
            app:bootstrapText="{fa_star}  基础底图  {fa_star}"
            app:bootstrapSize="sm"
            app:bootstrapBrand="info"/>
        <include
            layout="@layout/main_map_basemapmanager_container"/>
        <esrichina.hymn.Bootstrap.BootstrapButton
            android:layout_width="match_parent"
            android:layout_height="@dimen/window_header_height"
            android:layout_marginTop="@dimen/window_inner"
            android:layout_marginLeft="@dimen/window_inner"
            android:layout_marginRight="@dimen/window_inner"
            android:clickable="false"
            app:bootstrapText="{fa_star}  业务数据  {fa_star}"
            app:bootstrapSize="sm"
            app:bootstrapBrand="info"/>
        <ListView
            android:id="@+id/managerlayer_operation"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/window_inner"
            android:layout_marginLeft="@dimen/window_inner"
            android:layout_marginRight="@dimen/window_inner"
            ></ListView>
    </LinearLayout>

    制作ListView填充模板(布局文件)

    这里写图片描述

    依托SwipeLayout,制作可侧滑的布局文件。对SwipeLayout感兴趣的,可以参考https://github.com/daimajia/AndroidSwipeLayout

    main_operation_layer_item.xml文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <esrichina.hymn.SwipeLayout.SwipeLayout
        xmlns:swipe="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/operation_layerlist_swipe"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        swipe:leftEdgeSwipeOffset="0dp"
        swipe:rightEdgeSwipeOffset="0dp"
        app:clickToClose="true">
        <LinearLayout
            android:tag="Bottom1"
            android:background="@color/colorBackground"
            android:id="@+id/operation_layer_wrapper"
            android:layout_width="wrap_content"
            android:weightSum="1"
            android:layout_height="match_parent">
            <esrichina.hymn.Bootstrap.BootstrapButtonGroup
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                swipe:bootstrapBrand="info"
                swipe:bootstrapSize="xs">
                <esrichina.hymn.Bootstrap.BootstrapButton
                    android:id="@+id/operation_layer_identity_button"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    app:fontAwesomeIcon="fa_search"
                    swipe:bootstrapSize="xs"/>
                <esrichina.hymn.Bootstrap.BootstrapButton
                    android:id="@+id/operation_layer_attribute_button"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    app:fontAwesomeIcon="fa_stack_overflow"
                    swipe:bootstrapSize="xs"/>
                <esrichina.hymn.Bootstrap.BootstrapButton
                    android:id="@+id/operation_layer_piechart_button"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    app:fontAwesomeIcon="fa_pie_chart"
                    swipe:bootstrapSize="xs"/>
                <esrichina.hymn.Bootstrap.BootstrapButton
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    app:fontAwesomeIcon="fa_edit"
                    swipe:bootstrapSize="xs"/>
            </esrichina.hymn.Bootstrap.BootstrapButtonGroup>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/bootstrap_brand_secondary_fill"
            android:padding="10dp">
            <CheckBox
                android:id="@+id/position"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:duplicateParentState="false" />
        </LinearLayout>
    </esrichina.hymn.SwipeLayout.SwipeLayout>

    制作ListView的填充模板(适配器)

    这里写图片描述

    OperationLayerAdapter.java文件:

    package esrichina.hymn.usingmappingbyhymnlocal.Adapters;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.CheckBox;
    import android.widget.CompoundButton;
    
    import com.esri.arcgisruntime.layers.FeatureLayer;
    
    import java.util.ArrayList;
    
    import esrichina.hymn.SwipeLayout.SwipeLayout;
    import esrichina.hymn.SwipeLayout.adapters.BaseSwipeAdapter;
    import esrichina.hymn.usingmappingbyhymnlocal.R;
    
    /**
     * Created by HymnHan on 2017/5/15.
     */
    
    public class OperationLayerAdapter extends BaseSwipeAdapter {
        private LayoutInflater mainInflater;
        private ArrayList<FeatureLayer> mainFeatureLayersAL;
    
        public OperationLayerAdapter(Context context, ArrayList<FeatureLayer> featureLayers) {
            super();
            this.mainInflater = LayoutInflater.from(context);
            mainFeatureLayersAL = featureLayers;
        }
    
        @Override
        public int getCount() {
            int count = mainFeatureLayersAL.size();
    
            return count;
        }
    
        @Override
        public Object getItem(int position) {
            Object result = null;
            if (mainFeatureLayersAL != null) {
                result = mainFeatureLayersAL.get(position);
            }
            return result;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public int getSwipeLayoutResourceId(int position) {
            return R.id.operation_layerlist_swipe;
        }
    
        @Override
        public View generateView(int position, ViewGroup parent) {
            View convertView = null;
            try {
                OLAViewHolder holder = null;
                holder = new OLAViewHolder();
                final int positionInner = position;
                convertView = mainInflater.inflate(R.layout.main_operation_layer_item, null);
                CheckBox mCheckBox = (CheckBox) convertView.findViewById(R.id.position);
                SwipeLayout swipeLayout = (SwipeLayout) convertView.findViewById(getSwipeLayoutResourceId(position));
                holder.OLALayerCheckBox = mCheckBox;
                holder.OLAToolSwipeLayout = swipeLayout;
                holder.OLAFeatureLayer = mainFeatureLayersAL.get(position);
                swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
                swipeLayout.addDrag(SwipeLayout.DragEdge.Left, convertView.findViewById(R.id.operation_layer_wrapper));
                convertView.setTag(holder);
                convertView.findViewById(R.id.operation_layer_identity_button).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Integer index = positionInner;
                    }
                });
            } catch (Exception e) {
                Exception ee = e;
            }
            return convertView;
        }
    
        @Override
        public void fillValues(int position, View convertView) {
            final OLAViewHolder holder = (OLAViewHolder) convertView.getTag();
            holder.OLALayerCheckBox.setText(holder.OLAFeatureLayer.getName());
            holder.OLALayerCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    holder.OLAFeatureLayer.setVisible(isChecked);
                }
            });
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = generateView(position, parent);
            }
            mItemManger.bind(convertView, position);
            fillValues(position, convertView);
            return convertView;
        }
    
        public final class OLAViewHolder {
            public CheckBox OLALayerCheckBox;
            public SwipeLayout OLAToolSwipeLayout;
            public FeatureLayer OLAFeatureLayer;
        }
    }

    MainManagerLayerComponent.java文件:

    package esrichina.hymn.mapbasicframeworkbyhymn.Components;
    
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;
    
    import esrichina.hymn.Bootstrap.BootstrapThumbnail;
    import esrichina.hymn.Methods.ConfigurationsClass;
    import esrichina.hymn.SwipeLayout.SwipeLayout;
    import esrichina.hymn.SwipeLayout.util.Attributes;
    import esrichina.hymn.mapbasicframeworkbyhymn.Adapters.OperationLayerAdapter;
    import esrichina.hymn.mapbasicframeworkbyhymn.R;
    
    /**
     * Created by HymnHan on 2017/5/15.
     */
    
    public class MainManagerLayerComponent extends BaseComponent {
        private BootstrapThumbnail mainVectorBCT;
        private BootstrapThumbnail mainRasterBCT;
        private ListView mOperationLayerLV;
        private OperationLayerAdapter mOperationLayerAdapter;
        public MainManagerLayerComponent() {
            mainVectorBCT = (BootstrapThumbnail) mainHymnActivity.findViewById(R.id.managerlayer_vector);
            mainVectorBCT.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ChangeBasemapFunction("vector");
                }
            });
            mainRasterBCT = (BootstrapThumbnail) mainHymnActivity.findViewById(R.id.managerlayer_raster);
            mainRasterBCT.setBorderDisplayed(false);
            mainRasterBCT.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ChangeBasemapFunction("raster");
                }
            });
            mOperationLayerLV = (ListView) mainHymnActivity.findViewById(R.id.managerlayer_operation);
            mOperationLayerAdapter = new OperationLayerAdapter(
                    mainHymnActivity,
                    mainConfigurations.getMainReadOperationsFL());
            mOperationLayerAdapter.setMode(Attributes.Mode.Single);
            mOperationLayerLV.setAdapter(mOperationLayerAdapter);
            mOperationLayerLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    ((SwipeLayout)(mOperationLayerLV.getChildAt(position - mOperationLayerLV.getFirstVisiblePosition()))).close(true);
                }
            });
            ConfigurationsClass.setListViewHeightBasedOnChildren(mOperationLayerLV);
            ChangeBasemapFunction(mainConfigurations.getMainDefaultBasemap());
        }
        public void RefreshOperationLayersFunction() {
            mOperationLayerLV.setAdapter(mOperationLayerAdapter);
            ConfigurationsClass.setListViewHeightBasedOnChildren(mOperationLayerLV);
            ChangeBasemapFunction(mainConfigurations.getMainDefaultBasemap());
        }
        protected void ChangeBasemapFunction(String type) {
            switch (type)
            {
                case "raster" :
                    mainRasterBCT.setBorderDisplayed(true);
                    mainVectorBCT.setBorderDisplayed(false);
                    mainConfigurations.DisplayRasterBasemap();
                    //mainConfigurations.CloseDrawerFunction();
                    break;
                case "vector":
                default:
                    mainVectorBCT.setBorderDisplayed(true);
                    mainRasterBCT.setBorderDisplayed(false);
                    mainConfigurations.DisplayVectorBasemap();
                    //mainConfigurations.CloseDrawerFunction();
                    break;
    
            }
        }
        private void RefreshMapFunction()
        {
            try {
                if(mainRasterBCT.isBorderDisplayed() == true)
                {
                    mainConfigurations.DisplayVectorBasemap();
                    mainConfigurations.DisplayRasterBasemap();
                }
                else {
                    mainConfigurations.DisplayRasterBasemap();
                    mainConfigurations.DisplayVectorBasemap();
                }
            }
            catch (Exception e)
            {
    
            }
        }
    }
    

    这里写图片描述

    结尾

    源程序请自行下载:
    链接:http://pan.baidu.com/s/1eRXxrpS 密码:bmd1
    若失效,可发邮件给韩源萌(polyline@126.com)索要。

    展开全文
  • Android 智能家居 系统

    2016-01-18 09:25:11
    这是一款开放源代码的智能家居管理系统的应用,设计到了android中代码如何和应用场景进行数据交互方面的内容,也就是简单的物联网应用在移动开发中的体现。
  • 因为下载功能比较常用,而且业务功能相对统一,所以从Android 2.3(API level 9)开始,Android提供了DownloadManager用于统一管理下载功能。 下载请求 要想使用下载功能,首先得构建一个下载请求,说明从哪里下载...
  • android管理器以及apk文件安装流程

    千次阅读 2013-04-08 22:03:47
    应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作。APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件...
  • Android智能硬件开发心得总结(一)

    千次阅读 多人点赞 2019-12-23 00:17:33
    前言:转向Android智能硬件开发近一年了,一路过来也经历过几个大大小小的项目,从对Android智能硬件一无所知到现在算是略有小成,期间踩了很多坑,也接触到了许多非Android方面的知识,现用文章的方式将之记录下来,...
  • 类型:系统工具 版本:v1.2.0 ... 智能云仓库管理app是广州骆飞科技有限公司研发的基于云服务的库存管理SaaS平台,对智慧仓储等提供规范化管理智能云仓库存管理app,三屏合一,PC端、平板端、手机端都可...
  • 安卓系统监控任务管理器App推荐

    千次阅读 2015-04-23 16:43:24
    1System Monitor回顶部  相信不少朋友都有开启电脑后,首先开启一个...Windows系统自带任务管理器,很好,但安卓默认可没有这东西。想要在安卓上查看CPU、内存占用率等情况怎么办?那就得借助第三方App来实现了。
  • Android( 中文名:安卓) 是基于Linux平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。随着Android应用的更见广泛,了解并能...
  • Android SDK Android SDK 提供了在 Window/Linux/Mac 等...Android 最底层基于 Linux 2.6 内核实现,负责硬件驱动、网络管理、电源管理、系统安全、内存管理Android 的第二层由大多数开源的函数库组成,在这一层...
  • Android DevicePolicyManager 设备管理

    千次阅读 2018-12-03 13:54:04
    Android已然成为用户基数最大的智能手机系统,随着各行各业的加入,Android的不足之处也逐渐显现出来,显然有很多特殊行业并不适合使用Android系统。Google为了应对不同用户群体,慢慢的完善推出了...
  • Android usb 设备管理器lsusb 分析

    千次阅读 2019-09-04 09:23:53
    android 平台,我们再调试所有usb 设备时,硬件焊接好后,在内核usb 核心驱动正常情况下(当然只要USB外设遵循标准协议基本没有问题),我们都会通过lsusb 指令在确认usb 设置是否正常接入且被识别到,并且得到usb ...
  • android 安卓开发相关软件下载神地址

    千次阅读 2015-05-27 20:07:53
    http://www.androiddevtools.cn/ ... AndroidDevTools简介 Android Dev Tools官网地址:www.androiddevtools.cn   ...收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Andro
  • 安卓手机的APP客户端控制智能家电实现的小案例 本文章所需工具在文章末尾,请君自取,所用工具Android studio。 家居模拟器程序介绍 本程序实现了客厅、卧室、厨房三个房间的智能设备,包括:光亮传感器、LED灯...
  • Android内存管理机制

    千次阅读 2017-11-26 02:27:10
     Android系统是基于Linux 2.6内核开发的开源操作系统,而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而An
  • Android APP智能控制设备

    千次阅读 2016-06-24 16:12:45
    此app主要实现用智能手机对控制(比如车载,电梯等所有电子设备)进行参数设置,功能调试,运行状态实时监视,参数上传于下载,控制系统固件烧录等功能。智能手机软件通过WIFI透传模块与控制进行通
  • Android智能手机上捕获数据包(图文)

    千次阅读 2014-02-11 14:39:11
    如何在Android智能手机上捕获数据包? 本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!  当前Android系统越来越流行,无论是对于安卓应用的开发人员,还是对于网络安全的...
  • Android智能手机编程CNU–Android入门介绍 目录 1 智能手机的演变 2 Android操作系统的优势 3 Android的系统架构 4 Android的四个重要组件 5 Android面临的挑战 1. 智能手机的演变 智能手机的演变 第一代手机...
  • Android:BLE智能硬件开发详解

    千次阅读 2017-03-09 20:14:04
    前些年,智能硬件炒的挺火的,那今天,咱就来说说智能硬件那些事。BLE是智能硬件的一种通讯方式,通过BLE连接,iOS & Android手机和智能硬件就可以进行自定义的交互了

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,692
精华内容 26,276
关键字:

安卓智能管理器下载