技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

Android开发学习之微信公众号界面

            接着上一篇博客中的卡片式设计,我们继续从微信中寻找一些线索,我们首先来看这样一个界面,这是微信中默认的一个公众号,主要是发布腾讯新闻上的最新动态,我们可以看出,它采用了类似于我们在上一篇文章中采用的卡片式布局。那么,今天就让我们一起来做这样一个界面吧!           第一步,当然是创建layout_item的布局,即列表项目的布局,这里直接给出布局代码,代码并不复杂,只是属性设置较为繁琐。... 全文

微信 Android应用开发 android应用 android开发 android

Android开发学习之使用ViewPager+PagerTabStrip制作可滑动的Tab

            在昨天的文章中,我们使用ViewPager制作了一个简单的滑动切换的例子。今天让我们在昨天的基础之上,利用ViewPager来制作一个可以滑动的Tab。要实现这样的功能,除了ViewPager外,我们还需要一个PagerTabStrip来配合使用。简单说一下PagerTabStrip,Google官方描述为:PagerTabStrip是当前,未来和以前的页面的交互指标ViewPager。它旨在用作ViewPager插件在XML布局的子图。添加为ViewPager的孩子在你的布局文件,并设置其Android:layout_gravity到顶部或底部的钉选到ViewPager的顶部或底部。从每个页面的标题是由方法提供 getPageTitle(INT)在提供给ViewPager的适配器。这段话的大致意思就是说,PagerTabStrip是一个ViewPager的子控件,不能单独使用。通过layout_gravity属性来控制它显示的位置。使用getPageTitle()方法返回页面的标题。通过对这段话的理解我们可以设计出下面的布局代码:... 全文

viewpager Android应用开发 android开发 android应用 安卓

如何定位Android NDK开发中遇到的错误

Android NDK是什么?Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。NDK包括:从C / C++生成原生代码库所需要的工具和build files;将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中;支持所有未来Android平台的一系列原生系统头文件和库。为何要用到NDK?概括来说主要分为以下几种情况:... 全文

android ndk android开发 android平台 移动应用开发 自动化测试 操作系统 应用程序 编程语言 Testin

Android开发速成简洁教程二十三:发布应用

到这里基本介绍了Android开发的一些基本知识,在开发实际应用时最常用的几个参考是:... 全文

Android开发 Android应用 发布应用

Android开发速成简洁教程四:Android应用基本概念

Android平台的一个显著的特点是“低耦合”。Activity是Android应用的一个最基本的用户UI模块。如果采用 Windows Form应用作为参照,Activity相当于Windows中的WinForm。和Windows 应用不同的是,运行一个Activity或是Activity之间的交互是通过消息来实现的。也就是说如果想在起动一个Activity或是在一个 Activity中启动另一个Activity,是通过发送Intent消息来触发,而不像Windows WinForm应用,需要调Form示例的Show或是Load方法来实现。通过Intent消息来实现Activity之间的交互,则最大程度上减小了 模块之间的耦合度。这种机制类同Subscriber/Publisher机制。... 全文

Android开发 Android应用 基本概念

Android开发速成简洁教程九:创建应用程序框架

Android简明开发教程八说明了程序需要实现的功能,就可以创建Android项目了。请参见Android简明开发教程三:第一个应用Hello World ,创建一个新项目AndroidGraphics2DTutorial。今天先介绍创建的程序的框架。然后再项目添加如下类定义:... 全文

Android开发 Android应用 创建应用程序框架

Android应用开发新路线(用HTML5开发Android应用)

昨天参加了“第五期HTML5技术分享沙龙——成都站”,我的分享内容为“Android应用开发新路线(用HTML5开发Android应用)”。首先感谢成都优聚的李万鹏(@GoodTeamStudio)和@HTML5研究小组 的田爱娜提供的各种帮助与支持!这里上传一下ppt和演示工程,希望大家能多多提出意见。同时,内容安排得有些多,由于时间关系,只能启到一个抛砖引玉的作用,接下来欢迎大家随时通过各种方式进行交流!@杨丰盛。内容如下:《Android应用开发新路线——用HTML5开发Android应用程序》... 全文

Android 休闲 html5 职场 移动开发

横评:Android VS iPhone应用程序界面对比

Android与iPhone OS孰优孰劣,目前还在争论中,但是不妨我们从开发体验的角度以应用程序界面来对这两个平台进行一个小评测。... 全文

评测 Android开发 iPhone开发 Android应用程序界面 iPhone应用程序界面

Android开发学习之ImageView手势拖拽、缩放、旋转

           在Android应用中,图片随手势的拖拽、缩放、旋转在很多场景中都会用到,今天我们要做的就是在ImageView的基础上实现一个可以拖拽、缩放、转转的TouchView。                      一、实现原理             OnTouch事件捕捉+Matrix矩阵变换           二、核心方法       拖拽:Matrix.postTranslate(DeltalX, DeltalY);... 全文

手势识别 图片 触控 Android应用开发 android应用

android应用开发全程实录

今天给大家带来《android应用开发全程实录》中关于listview和adatper中的部分。包括listview的基本使用,listview的优化等。我们经常会在应用程序中使用列表的形式来展现一些内容,所以学好ListView是非常必需的。ListView也是Android中比较难以使用的控件,这节内容就将详细解读ListView的用法。一个ListView通常有两个职责。(1)将数据填充到布局。(2)处理用户的选择点击等操作。第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非常简单。一个ListView的创建需要3个元素。(1)ListView中的每一列的View。... 全文

adapter listview 优化 移动开发 android应用开发全程实录

android应用开发全程实录

接上篇博文 4.12.3 ListView使用BaseAdapter与ListView的优化在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点。读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖。这时候最方便的方法就是使用灵活的适配器BaseAdapter了。                                                                          ... 全文

优化 adapter listview 移动开发 android应用开发全程实录

Android开发:标准体重计算器应用的开发实例(1)

应用的操作和原理目标Android应用的操作过程是这样的:选择你的性别,然后输入你的身高,点查看计算结果的按钮就在Toast中显示你的标准体重。力求操作简单,结果显示清楚。标准体重的计算公式:男性:(身高cm-80)×70﹪=标准体重女性:(身高cm-70)×60﹪=标准体重应用的源码BMIActivity.java:... 全文

Android开发 体重计算器 移动应用

Android学习路线(三)运行你的Android应用

如果你按照上一课创建了你的Android项目,那么它包含默认的 "Hello World" 的源文件,能够让你的项目马上运行起来。 你如何运行你的应用以来与两件事:你是否拥有真正的Android设备和你是否使用的是Eclipse。这片课程向你展示如何使用Eclipse和命令行工具来将你的应用安装到真机上和模拟器上。 在你运行你的应用之前,你必须了解一下Android项目中的这些目录文件:... 全文

android应用 android模拟器 开发者 手机 xml

[Android开发系列]IT博客应用

1.关于坑好吧,在此之前先来说一下,之前开的坑,恩,确实是坑,前面开的两个android开发教程的坑,对不起,实在是没什么动力了,不过源码都有的,大家可以参照github这个应用https://github.com/joveth/laughter 里面的 代码,相关介绍见http://joveth.github.io/funny/... 全文

android android开发 android web csdn博客 it博客

外媒:Android应用开发人才需求增长

1)据Freelancer.com最新调查数据显示,Andrid、iPhone和HTML5应用开发者岗位需求仍在不断扩大。其中以Android开发者最为抢手,该职位已增至1702名就业人员,比今年第一季度的1419名就业者增长了20%。虽然苹果iPhone应用开发者就业人员仅增长9%,但该职位人员数量实际上最占优势,目前共达2985人。Mobile Q2 Jobs(from venturebeat)... 全文

Android 应用开发

命令行下Android应用开发

本文介绍如何创建你的第一个Android应用程序。您将学到如何创建一个Android工程和运行可调试版本的应用程序。 开始本文学习之前,确保你已经安装了开发环境。你需要:1、下载AndroidSDK。2、使用SDKManager下载最新的SDK tools和platforms。3、下载安装Ant。Note:对于1和2,也可以直接下载安装ADT Bundle。  创建Android工程... 全文

android 命令行 应用开发

无Java开发Android应用(NativeActivity) 你会吗

1.[代码]AndroidManifest.xml<manifest xmlns:android="http://schemas.android.com/apk/res/android"             package="com.example.native_activity"             android:versionCode="1"             android:versionName="1.0">               <!-- This is the platform API where NativeActivity was introduced. -->         <uses-sdk android:minSdkVersion="8" />               <!-- This .apk has no Java code itself, so set hasCode to false. -->         <application android:label="@string/app_name" android:hasCode="false">                   <!-- Our activity is the built-in NativeActivity framework class.                  This will take care of integrating with our NDK code. -->             <activity android:name="android.app.NativeActivity"                     android:label="@string/app_name"                     android:configChanges="orientation|keyboardHidden">                 <!-- Tell NativeActivity the name of or .so -->                 <meta-data android:name="android.app.lib_name"                         android:value="native-activity" />                 <intent-filter>                     <action android:name="android.intent.action.MAIN" />                     <category android:name="android.intent.category.LAUNCHER" />                 </intent-filter>             </activity>         </application>           </manifest>  2. [代码]Demo.c    #include <jni.h>     #include <errno.h>           #include <EGL/egl.h>     #include <GLES/gl.h>           #include <android/sensor.h>     #include <android/log.h>     #include <android_native_app_glue.h>       #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))     #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))           /**      * Our saved state data.      */     struct saved_state {         float angle;         int32_t x;         int32_t y;     };           /**      * Shared state for our app.      */     struct engine {         struct android_app* app;               ASensorManager* sensorManager;         const ASensor* accelerometerSensor;         ASensorEventQueue* sensorEventQueue;               int animating;         EGLDisplay display;         EGLSurface surface;         EGLContext context;         int32_t width;         int32_t height;         struct saved_state state;     };           /**      * Initialize an EGL context for the current display.      */     static int engine_init_display(struct engine* engine) {     // initialize OpenGL ES and EGL               /*          * Here specify the attributes of the desired configuration.          * Below, we select an EGLConfig with at least 8 bits per color          * component compatible with on-screen windows          */         const EGLint attribs[] = {                 EGL_SURFACE_TYPE, EGL_WINDOW_BIT,                 EGL_BLUE_SIZE, 8,                 EGL_GREEN_SIZE, 8,                 EGL_RED_SIZE, 8,                 EGL_NONE         };         EGLint w, h, dummy, format;         EGLint numConfigs;         EGLConfig config;         EGLSurface surface;         EGLContext context;               EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);               eglInitialize(display, 0, 0);               /* Here, the application chooses the configuration it desires. In this          * sample, we have a very simplified selection process, where we pick          * the first EGLConfig that matches our criteria */         eglChooseConfig(display, attribs, &config, 1, &numConfigs);               /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is          * guaranteed to be accepted by ANativeWindow_setBuffersGeometry().          * As soon as we picked a EGLConfig, we can safely reconfigure the          * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */         eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);               ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format);               surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);         context = eglCreateContext(display, config, NULL, NULL);               if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {             LOGW("Unable to eglMakeCurrent");             return -1;         }               eglQuerySurface(display, surface, EGL_WIDTH, &w);         eglQuerySurface(display, surface, EGL_HEIGHT, &h);               engine->display = display;         engine->context = context;         engine->surface = surface;         engine->width = w;         engine->height = h;         engine->state.angle = 0;               // Initialize GL state.         glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);         glEnable(GL_CULL_FACE);         glShadeModel(GL_SMOOTH);         glDisable(GL_DEPTH_TEST);               return 0;     }           /**      * Just the current frame in the display.      */     static void engine_draw_frame(struct engine* engine) {         if (engine->display == NULL) {             // No display.             return;         }               // Just fill the screen with a color.         glClearColor(((float)engine->state.x)/engine->width, engine->state.angle,                 ((float)engine->state.y)/engine->height, 1);         glClear(GL_COLOR_BUFFER_BIT);               eglSwapBuffers(engine->display, engine->surface);     }           /**      * Tear down the EGL context currently associated with the display.      */     static void engine_term_display(struct engine* engine) {         if (engine->display != EGL_NO_DISPLAY) {             eglMakeCurrent(engine->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);             if (engine->context != EGL_NO_CONTEXT) {                 eglDestroyContext(engine->display, engine->context);             }             if (engine->surface != EGL_NO_SURFACE) {                 eglDestroySurface(engine->display, engine->surface);             }             eglTerminate(engine->display);         }         engine->animating = 0;         engine->display = EGL_NO_DISPLAY;         engine->context = EGL_NO_CONTEXT;         engine->surface = EGL_NO_SURFACE;     }           /**      * Process the next input event.      */     static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) {         struct engine* engine = (struct engine*)app->userData;         if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION) {             engine->animating = 1;             engine->state.x = AMotionEvent_getX(event, 0);             engine->state.y = AMotionEvent_getY(event, 0);             return 1;         }         return 0;     }           /**      * Process the next main command.      */     static void engine_handle_cmd(struct android_app* app, int32_t cmd) {         struct engine* engine = (struct engine*)app->userData;         switch (cmd) {             case APP_CMD_SAVE_STATE:                 // The system has asked us to save our current state.  Do so.                 engine->app->savedState = malloc(sizeof(struct saved_state));                 *((struct saved_state*)engine->app->savedState) = engine->state;                 engine->app->savedStateSize = sizeof(struct saved_state);                 break;             case APP_CMD_INIT_WINDOW:                 // The window is being shown, get it ready.                 if (engine->app->window != NULL) {                     engine_init_display(engine);                     engine_draw_frame(engine);                 }                 break;             case APP_CMD_TERM_WINDOW:                 // The window is being hidden or closed, clean it up.                 engine_term_display(engine);                 break;         case APP_CMD_GAINED_FOCUS:                 // When our app gains focus, we start monitoring the accelerometer.                 if (engine->accelerometerSensor != NULL) {                     ASensorEventQueue_enableSensor(engine->sensorEventQueue,                             engine->accelerometerSensor);                     // We'd like to get 60 events per second (in us).                     ASensorEventQueue_setEventRate(engine->sensorEventQueue,                             engine->accelerometerSensor, (1000L/60)*1000);                 }                 break;             case APP_CMD_LOST_FOCUS:                 // When our app loses focus, we stop monitoring the accelerometer.                 // This is to avoid consuming battery while not being used.             if (engine->accelerometerSensor != NULL) {                     ASensorEventQueue_disableSensor(engine->sensorEventQueue,                             engine->accelerometerSensor);                 }                 // Also stop animating.                 engine->animating = 0;                 engine_draw_frame(engine);                 break;         }     }           /**      * This is the main entry point of a native application that is using      * android_native_app_glue.  It runs in its own thread, with its own      * event loop for receiving input events and doing other things.      */     void android_main(struct android_app* state) {         struct engine engine;               // Make sure glue isn't stripped.         app_dummy();               memset(&engine, 0, sizeof(engine));         state->userData = &engine;         state->onAppCmd = engine_handle_cmd;         state->onInputEvent = engine_handle_input;         engine.app = state;               // Prepare to monitor accelerometer         engine.sensorManager = ASensorManager_getInstance();         engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,                 ASENSOR_TYPE_ACCELEROMETER);         engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager,                 state->looper, LOOPER_ID_USER, NULL, NULL);               if (state->savedState != NULL) {             // We are starting with a previous saved state; restore from it.             engine.state = *(struct saved_state*)state->savedState;         }               // loop waiting for stuff to do.               while (1) {             // Read all pending events.             int ident;             int events;             struct android_poll_source* source;                   // If not animating, we will block forever waiting for events.             // If animating, we loop until all events are read, then continue             // to draw the next frame of animation.             while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events,                     (void**)&source)) >= 0) {                       // Process this event.                 if (source != NULL) {                     source->process(state, source);                 }                       // If a sensor has data, process it now.                 if (ident == LOOPER_ID_USER) {                     if (engine.accelerometerSensor != NULL) {                         ASensorEvent event;                         while (ASensorEventQueue_getEvents(engine.sensorEventQueue,                                 &event, 1) > 0) {                         LOGI("accelerometer: x=%f y=%f z=%f",                                     event.acceleration.x, event.acceleration.y,                                     event.acceleration.z);                         }                     }                 }                       // Check if we are exiting.                 if (state->destroyRequested != 0) {                     engine_term_display(&engine);                     return;                 }             }                   if (engine.animating) {                 // Done with events; draw next animation frame.                 engine.state.angle += .01f;                 if (engine.state.angle > 1) {                     engine.state.angle = 0;                 }                       // Drawing is throttled to the screen update rate, so there                 // is no need to do timing here.                 engine_draw_frame(&engine);             }         }     } ... 全文

Android应用 开发

Android应用开发

Android应用开发-小巫CSDN博客客户端总结篇2014博客之星投票地址:http://vote.blog.csdn.net/blogstar2014/details?username=wwj_748#content小巫CSDN博客客户端的开发要告一段落了,这个作品已经成功在360、应用宝渠道上线,有兴趣的朋友可以到以下地址下载:360手机助手:http://zhushou.360.cn/detail/index/soft_id/1973215?recrefer=SE_D_%E5%B0%8F%E5%B7%ABCSDN%E5%8D%9A%E5%AE%A2#prev应用宝:http://android.myapp.com/myapp/detail.htm?apkName=com.xiaowu.blogclient本篇博客作为此系列博客的总结篇,是想把自己开发这款应用中所获得的一些经验分享给大家以表感谢那么多朋友对小巫的关注和支持。很多初学者学习Android的时候总会有这种感觉,很想做点什么东西出来,但就是无从下手,也有很多人请教我说如何去学Android,如何去开发一款应用之类的问题。一般我都只是简单的回答是,从简单做起,先把基础掌握之后,然后尝试去实现自己的想法,不要一下子就想把所有细节都想透了,把所有功能都实现了,因为这是不可能的。初学者最怕的就是急躁,想当初我学Android的时候也有过这样的经历,也是从菜鸟过来的,但现在是否成为你们口中的大牛呢,我也不敢说是。因为我自己也有很多不知道不了解的东西,关于更深层次的东西我也还有很多没有涉及到,但是我却可以实现自己的想法,开发自己的产品。从我的博客,大家可以看到小巫开发过以下应用:博客开源的有以下:简美音乐播放器(一款简单入门的音乐播放器)小巫新闻客户端(新闻类客户端开发,包含客户端、服务端开发)浪腾微博客户端(新浪微博、腾讯微博整合客户端开发,开放平台API调用)小巫CSDN博客客户端(CSDN手机客户端,分析html网页,解析html)我也发表很多关于这些客户端的开发,相信大家都可以知道开发一款应用并不是想象得那么难,难的是没有动手之前就被前面的不知所措给阻碍了,所以我建议一些初学者,无须害怕自己没有掌握相关的知识,百度是你最好的老师,遇到不懂的,或者不明白的可以自己尝试去寻找答案,网上很多大牛都很有分享精神,会把一些经验分享给大家,这时你就可以通过学习他们的博文或者请教他们来得到解决方案。我总结了开发这样一款应用需要的一些能力:最基本的Java编程(开发Android应用需要有最基本的Java编程基础和面向对象思维)基础的Android开发知识(包括UI设计,基本控件的使用,4大组件、数据存储、网络请求)搜索解决方案的能力(关键字搜索问题,熟练使用搜索引擎寻找答案)解决问题的能力(如何查看logcat、debug还有定位问题)接入SDK的能力(接入第三方服务,熟悉如何快速集成到自己应用当中)经验总结的能力(善于总结分析问题,类似写文档或者博客记录问题)关于应用,UI可能一开始不能设计得很好看,因为我们开发者大部分都不太会设计,但这没有关系,有很多应用可供我们参考,小巫的一些素材都是通过自己搜集,然后应用到自己的程序中,可以解压缩apk包,获取里面的素材,如果有能力的,也可以自己使用photoShop设计相应的素材或者寻找美工帮忙设计。开始一款应用的开发,需要自己想清楚整个程序的框架,大致已什么样的方向去设计,专业点来说就是需求分析,先把需求确定下来之后,确定基本的交互页面,把整个框架搭建起来之后,就可以开始考虑业务逻辑的实现,比如如何通过网络请求获取数据,以什么样的形式展示数据等。当整体功能需求实现之后,如果有能力的可以尝试优化程序,比如ListView的优化,性能相关的优化,UI界面的优化等等,这些都是属于你在学习过程中需要不断积累的东西。关于小巫CSDN博客客户端的总结大概就这么多,如果各位有其他想跟笔者讨论交流的,可以及时留言,我可以在博客中继续补充。这里预告笔者近期在开发的一款产品,相信不久之后也会跟大家见面,希望能跟大家一起进步,谢谢。... 全文

android csdn博客 android应用

1 2 3 4 5 6 7 8