搜档网
当前位置:搜档网 › android仿iPhone滚轮控件实现及源码分析

android仿iPhone滚轮控件实现及源码分析

android仿iPhone滚轮控件实现及源码分析
android仿iPhone滚轮控件实现及源码分析

android仿iPhone滚轮控件实现及源码分析(一)

分类:android小例子2012-03-27 14:56 6258人阅读评论(58) 收藏举报

敬告:由于本文代码较多,所以文章分为了一二两篇,如果不便,敬请谅解,可以先下载文章下方的代码,打开参考本文查看,效果更好!

首先,先看下效果图:

这三张图分别是使用滚动控件实现城市,随机数和时间三个简单的例子,当然,界面有点简陋,下面我们就以时间这个为例,开始解析一下。

首先,先看下布局文件:

[html]view plaincopyprint?

1.

2.

3.

4. android:layout_height="wrap_content"

5. android:layout_width="fill_parent"

6. android:layout_marginTop="12dp"

7. android:orientation="vertical"

8. android:background="@drawable/layout_bg">

9.

10.

11. android:layout_height="wrap_content"

12. android:layout_width="fill_parent"

13. android:layout_gravity="center_horizontal"

14. android:paddingLeft="12dp"

15. android:paddingRight="12dp"

16. android:paddingTop="10dp">

17.

18.

19. android:layout_height="wrap_content"

20. android:layout_width="fill_parent"

21. android:layout_weight="1"/>

22.

23. android:layout_height="wrap_content"

24. android:layout_width="fill_parent"

25. android:layout_weight="1"/>

26.

27.

28.

29. android:layout_marginTop="12dp"

30. android:layout_height="wrap_content"

31. android:layout_width="fill_parent"

32. android:layout_weight="1"/>

33.

34.

里面只有三个控件,两个自定义的WheelView,还有一个TimePicker,然后进入代码里面看一下:

[java]view plaincopyprint?

1. p ublic class TimeActivity extends Activity {

2. // Time changed flag

3. private boolean timeChanged = false;

4.

5. //

6. private boolean timeScrolled = false;

7.

8. @Override

9. public void onCreate(Bundle savedInstanceState) {

10. super.onCreate(savedInstanceState);

11.

12. setContentView(https://www.sodocs.net/doc/ed17452773.html,yout.time_layout);

13.

14. final WheelView hours = (WheelView) findViewById(R.id.hour);

15. hours.setAdapter(new NumericWheelAdapter(0, 23));

16. hours.setLabel("hours");

17.

18. final WheelView mins = (WheelView) findViewById(R.id.mins);

19. mins.setAdapter(new NumericWheelAdapter(0, 59, "%02d"));

20. mins.setLabel("mins");

21. mins.setCyclic(true);

22.

23. final TimePicker picker = (TimePicker) findViewById(R.id.time);

24. picker.setIs24HourView(true);

25.

26. // set current time

27. Calendar c = Calendar.getInstance();

28. int curHours = c.get(Calendar.HOUR_OF_DAY);

29. int curMinutes = c.get(Calendar.MINUTE);

30.

31. hours.setCurrentItem(curHours);

32. mins.setCurrentItem(curMinutes);

33.

34. picker.setCurrentHour(curHours);

35. picker.setCurrentMinute(curMinutes);

36.

37. // add listeners

38. addChangingListener(mins, "min");

39. addChangingListener(hours, "hour");

40.

41. OnWheelChangedListener wheelListener = new OnWheelChangedListen

er() {

42. public void onChanged(WheelView wheel, int oldValue, int newValue)

{

43. if (!timeScrolled) {

44. timeChanged = true;

45. picker.setCurrentHour(hours.getCurrentItem());

46. picker.setCurrentMinute(mins.getCurrentItem());

47. timeChanged = false;

48. }

49. }

50. };

51.

52. hours.addChangingListener(wheelListener);

53. mins.addChangingListener(wheelListener);

54.

55. OnWheelScrollListener scrollListener = new OnWheelScrollListener() {

56. public void onScrollingStarted(WheelView wheel) {

57. timeScrolled = true;

58. }

59. public void onScrollingFinished(WheelView wheel) {

60. timeScrolled = false;

61. timeChanged = true;

62. picker.setCurrentHour(hours.getCurrentItem());

63. picker.setCurrentMinute(mins.getCurrentItem());

64. timeChanged = false;

65. }

66. };

67.

68. hours.addScrollingListener(scrollListener);

69. mins.addScrollingListener(scrollListener);

70.

71. picker.setOnTimeChangedListener(new TimePicker.OnTimeChangedList

ener() {

72. public void onTimeChanged(TimePicker view, int hourOfDay, int minut

e) {

73. if (!timeChanged) {

74. hours.setCurrentItem(hourOfDay, true);

75. mins.setCurrentItem(minute, true);

76. }

77. }

78. });

79. }

80.

81. /**

82. * Adds changing listener for wheel that updates the wheel label

83. * @param wheel the wheel

84. * @param label the wheel label

85. */

86. private void addChangingListener(final WheelView wheel, final String label)

{

87. wheel.addChangingListener(new OnWheelChangedListener() {

88. public void onChanged(WheelView wheel, int oldValue, int newValue)

{

89. wheel.setLabel(newValue != 1 ? label + "s" : label);

90. }

91. });

92. }

93. }

看一下,里面调用WheelView的方法有setAdapter()、setLabel("mins")、setCyclic(true)、setCurrentItem()、getCurrentItem()、addChangingListener()、addScrollingListener()这些方法,其中setAapter设置数据适配器,setCyclic()设置是否是循环,setCurrentItem和getCurrentItem分别是设置现在选择的item 和返回现在选择的item。后面两个设置监听的方法中,需要重写两个接口:[java]view plaincopyprint?

1. /**

2. * Wheel scrolled listener interface.

3. */

4. p ublic interface OnWheelScrollListener {

5. /**

6. * Callback method to be invoked when scrolling started.

7. * @param wheel the wheel view whose state has changed.

8. */

9. void onScrollingStarted(WheelView wheel);

10.

11. /**

12. * Callback method to be invoked when scrolling ended.

13. * @param wheel the wheel view whose state has changed.

14. */

15. void onScrollingFinished(WheelView wheel);

16. }

[java]view plaincopyprint?

1. p ublic interface OnWheelChangedListener {

2. /**

3. * Callback method to be invoked when current item changed

4. * @param wheel the wheel view whose state has changed

5. * @param oldValue the old value of current item

6. * @param newValue the new value of current item

7. */

8. void onChanged(WheelView wheel, int oldValue, int newValue);

9. }

在这里使用的是典型的回调方法模式。

然后现在,我们进入WheelView类,看一下他是如何构建,首先,WheelView 继承了View类。代码的22行到45行是导入的所需要的类。从54行到135行是声明一些变量和类:

[java]view plaincopyprint?

1. /** Scrolling duration */

2. private static final int SCROLLING_DURATION = 400;

3.

4. /** Minimum delta for scrolling */

5. private static final int MIN_DELTA_FOR_SCROLLING = 1;

6.

7. /** Current value & label text color */

8. private static final int VALUE_TEXT_COLOR = 0xF0000000;

9.

10. /** Items text color */

11. private static final int ITEMS_TEXT_COLOR = 0xFF000000;

12.

13. /** Top and bottom shadows colors */

14. private static final int[] SHADOWS_COLORS = new int[] { 0xFF111111,

15. 0x00AAAAAA, 0x00AAAAAA };

16.

17. /** Additional items height (is added to standard text item height) */

18. private static final int ADDITIONAL_ITEM_HEIGHT = 15;

19.

20. /** Text size */

21. private static final int TEXT_SIZE = 24;

22.

23. /** Top and bottom items offset (to hide that) */

24. private static final int ITEM_OFFSET = TEXT_SIZE / 5;

25.

26. /** Additional width for items layout */

27. private static final int ADDITIONAL_ITEMS_SPACE = 10;

28.

29. /** Label offset */

30. private static final int LABEL_OFFSET = 8;

31.

32. /** Left and right padding value */

33. private static final int PADDING = 10;

34.

35. /** Default count of visible items */

36. private static final int DEF_VISIBLE_ITEMS = 5;

37.

38. // Wheel Values

39. private WheelAdapter adapter = null;

40. private int currentItem = 0;

41.

42. // Widths

43. private int itemsWidth = 0;

44. private int labelWidth = 0;

45.

46. // Count of visible items

47. private int visibleItems = DEF_VISIBLE_ITEMS;

48.

49. // Item height

50. private int itemHeight = 0;

51.

52. // Text paints

53. private TextPaint itemsPaint;

54. private TextPaint valuePaint;

55.

56. // Layouts

57. private StaticLayout itemsLayout;

58. private StaticLayout labelLayout;

59. private StaticLayout valueLayout;

60.

61. // Label & background

62. private String label;

63. private Drawable centerDrawable;

64.

65. // Shadows drawables

66. private GradientDrawable topShadow;

67. private GradientDrawable bottomShadow;

68.

69. // Scrolling

70. private boolean isScrollingPerformed;

71. private int scrollingOffset;

72.

73. // Scrolling animation

74. private GestureDetector gestureDetector;

75. private Scroller scroller;

76. private int lastScrollY;

77.

78. // Cyclic

79. boolean isCyclic = false;

80.

81. // Listeners

82. private List changingListeners = new LinkedLi

st();

83. private List scrollingListeners = new LinkedList

nWheelScrollListener>();

在这里面,使用到了StaticLayout,在开发文档中找一下这个类:

[plain]view plaincopyprint?

1. S taticLayout is a Layout for text that will not be edited after it is laid out. Use Dy

namicLayout for text that may change.

2.

3. T his is used by widgets to control text layout. You should not need to use this cl

ass directly unless you are implementing your own widget or custom display o

bject, or would be tempted to call Canvas.drawText() directly.

staticLayout被创建以后就不能被修改了,通常被用于控制文本组件布局。

还使用到了Drawable、Text'Paint、GradientDrawable、GestureDetector、Scroller类,在开发文档中,GradientDrawable的概述:

[plain]view plaincopyprint?

1. A Drawable with a color gradient for buttons, backgrounds, etc.

2.

3. I t can be defined in an XML file with the element. For more information

, see the guide to Drawable Resources.

就是说这个类可以为按钮或者背景等提供渐变颜色的绘制。

TextPaint的概述:

[plain]view plaincopyprint?

1. T extPaint is an extension of Paint that leaves room for some extra data used du

ring text measuring and drawing.

TextPaint是Paint类的一个扩展,主要是用于文本在绘制的过程中为附件的数据留出空间。

GestureDetector:手势检测,看下开发文档中关于该类的概述:

[plain]view plaincopyprint?

1. D etects various gestures and events using the supplied MotionEvents. The Gest

ureDetector.OnGestureListener callback will notify users when a particular mo

tion event has occurred. This class should only be used with MotionEvents rep

orted via touch (don't use for trackball events).

为各种手势和事件提供MotionEvents。当一个具体的事件发生时会调用回调函数GestureDetector.OnGestureListener。这个类应该只适用于MotionEvents通过触摸触发的事件(不要使用追踪事件)。

140行到156行是构造方法,175到183行是set和getAdapter。在193行,setInterpolator()方法,设置interPolator这个动画接口,我们看下这个接口的概述:

[plain]view plaincopyprint?

1. A n interpolator defines the rate of change of an animation. This allows the basic

animation effects (alpha, scale, translate, rotate) to be accelerated, decelerate

d, repeated, etc.

定义了一种基于变率的一个动画。这使得基本的动画效果(alpha, scale, translate, rotate)是加速,减慢,重复等。这个方法在随机数这个例子中被使用。

203行到213行设置显示的item条数。在setVisibleItems()方法里面调用了View的invalidate()方法,看下文档中对该方法的介绍:

[plain]view plaincopyprint?

1. I nvalidate the whole view. If the view is visible, onDraw(android.graphics.Canva

s) will be called at some point in the future. This must be called from a UI thre

ad. To call from a non-UI thread, call postInvalidate().

使全部视图失效,如果View视图是可见的,会在UI线程里面从新调用onDraw()方法。

223行到233行是设置Label,既后面图片中的hours.

245行到296行是设置监听,在上面已经简单的说了一下,这里不在累述。

307行到349行是设置正被选中item,就是在那个阴影条框下的那个部分,比较简单。里面主要调用了scroll这个方法:

[java]view plaincopyprint?

1. /**

2. * Scroll the wheel

3. * @param itemsToSkip items to scroll

4. * @param time scrolling duration

5. */

6. public void scroll(int itemsToScroll, int time) {

7. scroller.forceFinished(true);

8. lastScrollY = scrollingOffset;

9. int offset = itemsToScroll * getItemHeight();

10. scroller.startScroll(0, lastScrollY, 0, offset - lastScrollY, time);

11. setNextMessage(MESSAGE_SCROLL);

12. startScrolling();

13. }

357行到365行是设置item数据能否循环使用。

384行的initResourcesIfNecessary()方法,从字面意思,如果需要的初始化资源。

[java]view plaincopyprint?

1. p rivate void initResourcesIfNecessary() {

2. if (itemsPaint == null) {

3. itemsPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG

4. | Paint.FAKE_BOLD_TEXT_FLAG);

5. //itemsPaint.density = getResources().getDisplayMetrics().density;

6. itemsPaint.setTextSize(TEXT_SIZE);

7. }

8.

9. if (valuePaint == null) {

10. valuePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG

11. | Paint.FAKE_BOLD_TEXT_FLAG | Paint.DITHER_FLAG);

12. //valuePaint.density = getResources().getDisplayMetrics().density;

13. valuePaint.setTextSize(TEXT_SIZE);

14. valuePaint.setShadowLayer(0.1f, 0, 0.1f, 0xFFC0C0C0);

15. }

16.

17. if (centerDrawable == null) {

18. centerDrawable = getContext().getResources().getDrawable(R.drawab

le.wheel_val);

19. }

20.

21. if (topShadow == null) {

22. topShadow = new GradientDrawable(Orientation.TOP_BOTTOM, SHA

DOWS_COLORS);

23. }

24.

25. if (bottomShadow == null) {

26. bottomShadow = new GradientDrawable(Orientation.BOTTOM_TOP,

SHADOWS_COLORS);

27. }

28.

29. setBackgroundResource(R.drawable.wheel_bg);

30. }

这个方法就是初始化在532行calculateLayoutWidth()方法中调用了这个方法,同时调用了487行的getMaxTextLength()这个方法。

471行getTextItem(int index)通过一个索引获取该item的文本。

这是第一部分,没有多少有太多意思的地方,重点的地方在以后532行到940行的内容,另起一篇,开始分析,这一篇先到这。

最后是下载地址:

Android仿iPhone滚动控件源码

https://www.sodocs.net/doc/ed17452773.html,/detail/aomandeshangxiao/4175719

未完待续!敬请下篇:android仿iPhone滚轮控件实现及源码分析(二)

期末大作业大学生涯规划档案

期末大作业:大学生涯规划档案 ※交作业地点:2204教室 一、自我探索 1.基本情况: 2.你的职业兴趣类型(霍兰德代码)是什么?请结合霍兰德人格类型理论中对六种典型类型的描述,在下面列出 最能描述你自己的语句。 我的霍兰德代码是RSI,对机械与物体的关心比较强烈,喜欢使用工具、机器等需要基本操作技能的职业,如技术性职业(计算机硬件人员、摄影师、制图员等)。 3.你的气质类型什么?请结合希波克拉底“四液说”及巴甫洛夫高级神经类型学说对四种气质类型的描述,在下 面列出最能描述你自己的语句。 我的气质类型是黏液质。黏液质型的人属于稳重、自制、内向的类型。这类人踏实、稳重、说话慢且言语少且不善于空谈,遇事谨慎,善于克制忍让,对工作埋头苦干,但黏液质的人有些惰性,动作缓慢,不够灵活,内向,比较固执拘谨。 4.你的职业性格(MBTI)类型是什么?请根据MBTI对十六种人格类型的描述,在下面列出最能描述你自己的语 句。 我的职业性格类型是传统主义类型ISFJ。有很强的责任心和事业心,他们忠诚,能按时完成任务,注重稳定、合作和可靠,而且他们严肃认真,工作努力,有很强的服务于社会的需要和意识。他们坚定,尊重权威,天性谨慎,细心尽责,注重实用。 6.找出你最擅长并愿意在未来职业中运用的技能 1)你最重要的五项自我管理技能(形容词) 认真、慎重、热情、随和、理性 2)你最重要的五项可迁移技能(动词) 比较、分析、管理、组织、处理 3)你最重要的五项知识技能(名词) 数字、年轻人、学生、空气、计算机

8.请根据你的兴趣、气质类型、性格、能力类型及他人对你的评价,再结合自己成长经历的回顾,对你自己作一 个全面的描述。 我是一个兴趣面较窄,内向,稳重,言语少不善空谈的人,性格有点孤僻,但是外冷内热,有责任心,有担当,比较喜欢管理,工作努力,严肃认真。小学、初中、高中都当过班干部,在任期间得到了同学们的大力支持,干过一些实事,但也有翘尾巴的时候,也就是容易骄傲自满。 二、职业清单 1.你的兴趣类型建议你考虑的职业 根据你的兴趣探索结果,列出至少10种与你霍兰德类型相对应(或近似)的职业,并标出每种职业的霍兰德代码。RSI:纺织工、编织工、农业学校教师、职业课程教师、雨衣上胶工。RES:登山导游。REC:实验室动物饲养员。RIS:厨师、电器修理工、电工。 2.你的气质类型建议你考虑的职业 根据你的气质探索结果,列出至少5种与你气质类型相对应的职业 教师、医生、翻译、会计、律师、记者、主持人 3.你的性格类型建议你考虑的职业 根据你的MBTI类型偏好,从相关测评或资料中所列举的职业中挑出你最适合的职业,至少要有10种. 教师、医生、翻译、保健师、会计师、律师、医护人员、记者、图书管理员、主持人、 4.你的能力倾向建议你考虑的职业: 根据你的GA TB测量结果,列出至少5种与你能力倾向匹配(或近似)的职业 统计员、会计师、出纳、秘书、图书管理员 三、将职业清单上的职业进行分类和进一步探索 1.请根据自己的理解,将职业清单上所有出现过的职业进行分类,并说明每种职业类型的共同特点: 技能型:厨师、饲养员、电器修理工、电工。 特点:操作性工作,动手能力强,做事手脚灵活,动作协调。 事务型:登山导游、翻译、保健师、会计、律师、医护人员、记者、主持人、统计员、出纳、图书管理员。特点:尊重权威和规章制度,喜欢按计划办事,细心、有条理。 研究型:教师、医生。 特点:考虑问题理性,做事喜欢精确,喜欢逻辑分析和推理。 2.以上职业类型中,与你兴趣、气质、性格及能力均匹配某些职业类型及其包含的具体职业 (注意:这些职业类型中包含的具体职业可以是职业清单中曾出现过的,也可以是未曾出现但符合这些职业类型共同特点的职业,这些职业都值得你去深入地探索。你的职业探索最好首先集中在这些职业上,了解这些职业的要求和工作环境等细节,并根据目前你对自己兴趣、气质、性格及能力的了解,考虑一下你将会如何从事这份工作。) 技能型:厨师、饲养员、电器修理工、电工。 事务型:登山导游、会计、律师、记者、主持人、图书管理员。 3.以上职业类型中,与你兴趣、气质、性格及能力中有2-3项匹配某些职业类型及其包含的具体职业 (注意: 这些职业类型中包含的具体职业可以是职业清单中曾出现过的,也可以是未曾出现但符合这些职业类型共 同特点的职业。这些职业也有比较大的可能性,可供你进行下一步的探索。) 技能型:厨师、电器修理工、电工。 事务型:登山导游、会计、律师、记者、主持人、图书管理员。 研究型:工程师、电脑编程人员。

Android Hotfix 新方案——Amigo 源码解读

Android Hotfix 新方案——Amigo 源码解读 首先我们先来看看如何使用这个库。 用法 在project 的build.gradle中 dependencies { classpath 'me.ele:amigo:0.0.3' } 在module 的build.gradle中 apply plugin: 'me.ele.amigo' 就这样轻松的集成了Amigo。 生效补丁包 补丁包生效有两种方式可以选择: ? 稍后生效补丁包 ? 如果不想立即生效而是用户第二次打开App 时才打入补丁包,则可以将新的Apk 放到/data/data/{your pkg}/files/amigo/demo.apk,第二次打开时就会自动生效。可以通过这个方法 ? File hotfixApk = Amigo.getHotfixApk(context); ?

获取到新的Apk。 同时,你也可以使用Amigo 提供的工具类将你的补丁包拷贝到指定的目录当中。 ? FileUtils.copyFile(yourApkFile, amigoApkFile); ? ? 立即生效补丁包 ? 如果想要补丁包立即生效,调用以下两个方法之一,App 会立即重启, 并且打入补丁包。 ? Amigo.work(context); ? Amigo.work(context, apkFile); ? 删除补丁包 如果需要删除掉已经下好的补丁包,可以通过这个方法 Amigo.clear(context); 提示:如果apk 发生了变化,Amigo 会自动清除之前的apk。 自定义界面 在热修复的过程中会有一些耗时的操作,这些操作会在一个新的进程中的Activity 中执行,所以你可以通过以下方式来自定义这个Activity。

Android大作业报告

移动设备软件应用与开 发 大作业报告 姓名: 学号: 班级: 院系: 日期: 任课教师:

一、程序的运行环境、安装步骤 1、运行环境 游戏运行环境:Android1.5以上版本 2、程序的组成部份: 2.1、JDK安装 1.我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: 2.JAVA_HOME值为:D:\Program Files\Java\jdk1.6.0_18(你安装JDK 的目录) 3.CLASSPATH值 为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\b in; 4.Path: 在开始追加%JAVA_HOME%\bin; 5.NOTE:前面四步设置环境变量对搭建Android开发环境不是必须 的,可以跳过。 安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了: 2.2、Eclipse安装 2.3、Android SDK安装

在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Force https://..."这项,再点击Available Packages 。 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包 在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。 image图2、设置Android SDK的环境变量 “确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 运行android –h 如果有类似以下的输出,表明安装成功: 图3、验证Android SDK是否安装成功 2.4、ADT安装

Android期末测试题(附带答案)

一、选择题 1、下列哪项不是Android四大组件( C ) A.Seivice B. Activity C. Handler D. Content Provider 2、Android是如何组织Activity的( B ) A.以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是( B ) A. 在 android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作 UI 组件 C. 新线程可以和 Handler 共同使用 D. 创建的 Handler 对象,它隶属于创建它的线程 4、下列关于内存回收的说明,哪个是正确的(B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、设置xml布局文件中的字体大小一般用什么单位( c ) A.dp B. px C. sp D. pt 6、关于service生命周期的onCreate()和onStart()说法正确的是( D ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 7、Android项目工程下面的assets目录,以下说法正确的是( A ) A.这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B.主要放置多媒体等数据文件 C.主要放置图片文件 D.放置字符串,颜色,数组等常量数据 8、在android中使用SQLiteOpenHelper这个辅助类,生成一个可操作的数据库,调用的方法是( A )A.getReadableDatabase() B.getDatabase() C.getEnbleDatabase() D.createDateBase() 9、Activity从可见状态变为半透明遮盖状态时,生命周期中哪个方法被调用( B )

Android源码下载方法详解

Android: Android源码下载方法详解 分类:Android平台 安卓源码下载地址:https://www.sodocs.net/doc/ed17452773.html,/source/downloading.html 相信很多下载过内核的人都对这个很熟悉 git clone git://https://www.sodocs.net/doc/ed17452773.html,/kernel/common.git kernel 但是这是在以前,现在如果这么执行的话,会显示如下内容 Initialized empty Git repository in /home/star/working/kernel/.git/ https://www.sodocs.net/doc/ed17452773.html,[0: 149.20.4.77]: errno=Connection refused fatal: unable to connect a socket (Connection refused) 通过浏览器输入https://www.sodocs.net/doc/ed17452773.html,/,发现该网站已经被重定向为 https://www.sodocs.net/doc/ed17452773.html,/source/downloading.html 可以在该页面的最后发现内核的下载方法。 下面我们介绍一下Android源码下载的步骤。 工作环境: 操作系统:Ubuntu 10.04 或Ubuntu10.10 git程序:1.7.0.4 或1.7.1 转载请注明出处:https://www.sodocs.net/doc/ed17452773.html,/pku_android 方法一: 1.1 初始化安装环境 参考网页https://www.sodocs.net/doc/ed17452773.html,/source/initializing.html 主要要做的就是安装jdk和安装一些软件包 $ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \ libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \ libxml2-utils 如果已经安装了,就不许要这步了 1.2 无论下载内核和源码,都需要进行如下操作 参考网页https://www.sodocs.net/doc/ed17452773.html,/source/downloading.html $ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://https://www.sodocs.net/doc/ed17452773.html,/dl/googlesource/git-repo/repo > ~/bin/repo 如果出现: repo init error: could not verify the tag 'v1.12.7',

《Android手机高级开发》大作业试卷及评分标准_A卷

宁波大红鹰学院 2015-2016学年第二学期 2013级本科计算机科学与技术专业《Android手机高级开发》 期末考试试卷(A卷) 考核方式:大作业 题目:智能手机软件的设计与实现 要求: 一、作品要求描述 随着智能手机的普及,基于Android平台的应用软件需求也越来越多。宁波东蓝数码有限公司是一家规模较大的软件公司,随着公司规模的不断扩大,目前新增了大量基于Android智能手机方面的业务,但由于业务量较大,公司内部开发人员一时无法满足要求,现需要外包一些智能手机应用软件。现假设你所在的公司承接了该公司智能手机外包项目的开发工作,并明确了外包的项目范围如下: (1)带共享功能的文件管理、多媒体技术制作类项目;(2)带共享功能的地图处理类项目;(3)带有服务器处理的移动端APP。 将其中一项任务下达给你,并提出了如下要求: 1.界面美观,功能实用、丰富; 2.项目中至少应包含如下四种数据存贮(SharedPreferneces/SQLite/文件 /ContentProvider)中的其中一种; 3.项目中需要包含地图处理功能; 4.项目中需要包含多媒体或物理传感方面的功能; 5.项目中对比较费时的工作,需要采用异步处理技术。 二、上交的资料(纸质及电子稿) (1)大作业报告,报告中要求项目分工明确,格式参照模板。 (2)项目源代码,如有服务器端程序,还应包括服务器端程序源码及导出的数据库sql文件。

三、考核方式 (1)以小组方式(原则上为3人/组),于18周课外时间安排答辩,按照给定评分标准打分; (2)各小组项目主题不能相同,否则以作品类同处理; (3)各小组答辩完毕,立即将其纸质稿及电子稿上交,截止时间:第十八周周末。 四、评分标准:(写明各项分值,总分值为100分) 1、大作业报告(40分) 要求及评分标准: 1)及时上交。(5分) 2)需求分析:需求描述准确简练,意思表达清楚,无明显错误;需要画出UML需求用例图及用例分析说明。(10分) 3)系统设计:需要画出参与整个系统的各个模块,解释各模块功能;用UML 画出核心模块时序图、类图,及其各个模块之间的关系。模型中的各图 表达准确,无明显错误,图与图之间的关系明确,表达完整。(10分)4)系统测试:对主要功能模块需要有测试用例,最后要有测试结果。(5分)5)系统实现:核心模块界面、关键代码,并注释。(10分) 2、软件作品(40分) 要求及评分标准: 1)及时上交。(5分) 2)界面设计:要求界面美观,操作简易,体现个性。(10分) 3)数据库设计:数据库内表的建立合理,具有最基本的约束,设置表的主键、外键,需要阐明这样设置的原因。(5分) 4)系统实现:完成项目基本功能,以该项目在市场上同类项目中一般应用功能作比较。(10分) 5) 创新性:完成项目基本模块之外的特殊功能。(10分) 3、现场答辩(20分) 要求及评分标准: 1)仪容仪表:衣着整洁、言谈得体,举止大方。(3分)

(完整版)Android应用开发期末考试题

试题 一、选择题 1 android虚拟设备的缩写是(A VD) 2 Android SDK目前支持的操作系统(DOS) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4 Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 6以下不是Android中调试项目的正确步骤(测试用例) 7下列不是Activity的生命周期方法之一的是(OnResume) 8 以下可以做EditText编辑框的提示信息是(adroid:hint) 9以下不是Activity启动的方法是(gotoActivity) 10 以下不是手机操作系统的是(windows vista) 二、填空题 1 Android平台由操作系统,中间件,用户界面和应用软件组成的。 2 Android平台提供了2D,3D的图形支持,数据库支持SQLite,并且集成了浏览器 3目前已知的可以用来搭建Android开发环境的系统有windows,Linux,Mac等 4开发中推荐使用的IDE开发组合为IDE,eclipse,ADI来开发 5 Android SDK主要以java语言为基础 6创建工程时需要填写的信息名称有工程名,包的名字,Activity的名字还有应用的名字 7 Android.jar是一个标准的压缩包,其内容包含的是编译后的class,包含了全部的API 三、简答题 1 Android SDK中API的包结构的划分?至少五个 android.util,android.os,android.content,android.view,android.graphics,android.text 2 Android软件框架结构自上而下可分为哪些层? 应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(RunTime)、操作系统层(OS) 3 Android应用程序的4大组件是什么? Activity、Broadcast Intent Receiver、Service、Content Provider 4 Android应用工程文件结构有哪些? 源文件(包含Activity),R.java文件,Android Library,assets目录res目录,drawble 目录,layout目录,values目录,AndroidManifest.xml 5 Android开发应用程序最有可能使用到的应用框架部分是哪些? 一组View(UI)组件,Content Providers,Resource Manger,Notification Manger,Activiy Manger 6 Android底层库包含哪些? 系统C库,媒体库,Surface Manager,LibWebCore,SGL 四、编程 1实现点击一个按钮,结束当前Activity并将需要返回的数据放置并关闭当前窗体请编写核心代码 Bundle bundle = new Bundle ( );

Android源代码结构分析

目录 一、源代码结构 (2) 第一层次目录 (2) bionic目录 (3) bootloader目录 (5) build目录 (7) dalvik目录 (9) development目录 (9) external目录 (13) frameworks目录 (19) Hardware (20) Out (22) Kernel (22) packages目录 (22) prebuilt目录 (27) SDK (28) system目录 (28) Vendor (32)

一、源代码结构 第一层次目录 Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: . |-- Makefile (全局的Makefile) |-- bionic (Bionic含义为仿生,这里面是一些基础的库的源代码) |-- bootloader (引导加载器),我们的是bootable, |-- build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) |-- dalvik (JAVA虚拟机) |-- development (程序开发所需要的模板和工具) |-- external (目标机器使用的一些库) |-- frameworks (应用程序的框架层) |-- hardware (与硬件相关的库) |-- kernel (Linux2.6的源代码) |-- packages (Android的各种应用程序) |-- prebuilt (Android在各种平台下编译的预置脚本) |-- recovery (与目标的恢复功能相关) `-- system (Android的底层的一些库)

Android编程基础大作业

宁波大红鹰学院信息工程学院 课 程 设 计 报 告 项目名称:视频播放器 项目组长:叶紫涵 项目成员:章铖豪黄韡 班级名称:12计科(2) 专业名称:计算机科学与技术 完成时间:2015年1月2日 信息工程学院制

Android编程基础大作业分组报名表项目名称视频播发器 项目功能(1) 能够播放.avi, .mp4等文件 (2) 能查找目标文件是否存在 团队成员 姓名性别年级院、系、专业学号备注 叶紫涵男12计科(2)信息工程学院 12110503 37 组长 黄韡男12计科(2)信息工程学院12110502 12 组员 章铖豪男12计科(2)信息工程学院12110503 39 组员 指导教师姓名陆正球研究 方向 软件技术职称讲师 团队联系方式联系人姓名邮件地址

目录 1.概述 (3) 1.1项目背景 (3) 1.2国内外研究状况 (3) 1.3研究的主要内容 (3) 1.4项目分工(说明各小组成员在项目中承担的工作)....... 错误!未定义书签。 2. 相关技术 (3) 3. 系统分析 (3) 4. 系统设计 (3) 4.1功能模块的流程说明 (4) 4.2数据库设计......................................... 错误!未定义书签。 5. 系统实现 (4) 6. 系统测试 (6) 7. 总结 (7) 7.1难点分析 (7) 7.2解决方案 (7)

1.概述 1.1 项目背景 近年来随着手机技术的不断发展,影音播放的应用已从单纯的电视机发展到更为广阔的领域,如电脑、MP4、平板、手机等等。 1.2 国内外研究状况 国内外各种手机视频播放器层出不穷,功能日新月异,但是各有长处和缺点,如何做一个能被大家广泛接受视频的视频播放器,是一个值得挑战的问题。 1.3 研究的主要内容 如何使用Android自带播放器实现视频播放的基本操作,以及如何选择用户想观看的视频。 2.相关技术 采用的技术是IBM公司开发的SWT,这是一种基于Java的窗口组件,类似Java本身提供的AWT和Swing窗口组件:不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse 的用户界面还使用了GUI中间层JFace,从而简化了基于SWT的应用程序的构建。Eclipse 的设计思想是:一切皆插件。Eclipse核心很小,其他所有功能都以插件的形式附加于Eclipse 核心之上。Eclipse基于内核包括:图形API(SWT/JFace),Java开发环境插件(JDT),插件开发环境(PDE)等。Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby、Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。 3.系统分析 此为一个视频播放器,设计的软件需要支持快进、快退、暂停、继续和进度拖曳等功能。视频播放软件工程文件主要包括src文件夹(Java源码)、res文件夹(资源文件)和AndroidMainfest.xml(程序清单)。软件主要由Activities组成,每个Activity对应一个模块。不同的Activity通过Intent进行通信和相互调用。 4.系统设计

Android USB 驱动分析

Android USB 驱动分析 一、USB驱动代码架构和使用 1、代码简介 USB驱动代码在/drivers/usb/gadget下,有三个文件:android.c, f_adb.c, f_mass_storage.c;g_android.ko 是由这三个文件编译而来,其中android.c 依赖于 f_adb.c 和 f_mass_storage.c(这两个文件之间无依赖关系)。 可在android.c中看到: static int __init android_bind_config(struct usb_configuration *c) { struct android_dev *dev = _android_dev; int ret; printk(KERN_DEBUG "android_bind_config\n"); ret = mass_storage_function_add(dev->cdev, c, dev->nluns); if (ret) return ret; return adb_function_add(dev->cdev, c); } 2、驱动使用 要使USB mass storage连接到主机: 打开/sys/devices/platform/usb_mass_storage/lun0/file文件,向 file文件写入一个存储 设备的路径,例如/dev/block/vold/179:0 (major:minor)路径; 这里的usb_mass_storage根据实际应用可以改的,由 platform_device_register函数的参数决 定。 例如: static struct platform_device fsg_platform_device = { .name = "usb_mass_storage", .id = -1, }; static void __init tegra_machine_init(void) { .... (void) platform_device_register(&fsg_platform_device); .... }

Android 串口编程原理和实现方式附源码

提到串口编程,就不得不提到JNI,不得不提到JavaAPI中的文件描述符类:。下面我分别对JNI、以及串口的一些知识点和实现的源码进行分析说明。这里主要是参考了开源项目android-serialport-api。 串口编程需要了解的基本知识点:对于串口编程,我们只需对串口进行一系列的设置,然后打开串口,这些操作我们可以参考串口调试助手的源码进行学习。在Java中如果要实现串口的读写功能只需操作文件设备类:即可,其他的事都由驱动来完成不用多管!当然,你想了解,那就得看驱动代码了。这里并不打算对驱动进行说明,只初略阐述应用层的实现方式。 (一)JNI: 关于JNI的文章网上有很多,不再多做解释,想详细了解的朋友可以查看云中漫步的技术文章,写得很好,分析也很全面,那么在这篇拙文中我强调3点: 1、如何将编译好的SO文件打包到APK中?(方法很简单,直接在工程目录下新建文件夹libs/armeabi,将SO文件Copy到此目录即可) 2、命名要注意的地方?(在编译好的SO文件中,将文件重命名为:lib即可。其中是编译好后生成的文件) 3、MakeFile文件的编写(不用多说,可以直接参考package/apps目录下用到JNI的相关项目写法) 这是关键的代码: [cpp]view plaincopy

(二):

文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的或。这是API的描述,不太好理解,其实可简单的理解为:就是对一个文件进行读写。 (三)实现串口通信细节 1) 建工程:SerialDemo包名:org.winplus.serial,并在工程目录下新建jni和libs两个文件夹和一个org.winplus.serial.utils,如下图: 2) 新建一个类:SerialPortFinder,添加如下代码: [java]view plaincopy 1.package org.winplus.serial.utils; 2. 3.import java.io.File; 4.import java.io.; 5.import java.io.IOException; 6.import java.io.LineNumberReader; 7.import java.util.Iterator; 8.import java.util.Vector; 9. 10.import android.util.Log; 11. 12.public class SerialPortFinder { 13. 14.private static final String TAG = "SerialPort"; 15.

App工程结构搭建:几种常见Android代码架构分析

App工程结构搭建:几种常见Android代码架构分析 关于Android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角度,看到整齐的代码,优美的分层总是一种舒服的享受的。 从艺术的角度看,其实我们是在追求一种美。 本文先分析几个当今比较流行的android软件包,最后我们汲取其中觉得优秀的部分,搭建我们自己的通用android工程模板。 1. 微盘 微盘的架构比较简单,我把最基本,最主干的画了出来: 第一层:com.sina.VDisk:com.sina(公司域名)+app(应用程序名称) 。 第二层:各模块名称(主模块VDiskClient和实体模块entities)第三层:各模块下具体子包,实现类。 从图中我们能得出上述分析中一个最简单最经典的结构,一般在应用程序包下放一些全局的包或者类,如果有多个大的模块,可以分成多个包,其中包括一个主模块。 在主模块中定义基类,比如BaseActivity等,如果主模块下还有子模块,可以在主模块下建立子模块相应的包。说明一点,有的时候如果只有一个主模块,我们完全可以省略掉模

块这一层,就是BaseActivity.java及其子模块直接提至第二层。 在实体模块中,本应该定义且只定义相应的实体类,供全局调用(然而实际情况可能不是这样,后面会说到)。在微盘应用中,几乎所有的实体类是以xxx+info命名的,这种命名也是我赞成的一种命名,从语义上我觉得xxxModel.java这种命名更生动更真实,xxxModel给我一种太机械太死板的感觉,这点完全是个人观点,具体操作中以个人习惯为主。还有一点,在具体的xxxInfo,java中有很多实体类中是没有get/set的方法,而是直接使用public的字段名。这一点,我是推荐这种方式的,特别是在移动开发中,get/set方法很多时候是完全没有必要的,而且是有性能消耗的。当然如果需要对字段设置一定的控制,get/set方法也是可以酌情使用的。 2. 久忆日记 相比于微盘的工程结构,久忆日记的结构稍微复杂了一些。如下图: 1).第一层和前面微盘一样的. 2).第二层则没有模块分类,直接把需要的具体实现类都放在下面,主要日记的一些日记相关的Activity。 3).第二层的实体包命令为model包,里面不仅存放了实体类

互联网应用开发课程实验和大作业

课程实验 实验1:第一个Android程序 (1)创建Android开发环境 (2)使用Eclipse建立第一个Android程序 (3)分析Android的程序的文件结构和用途 实验2:Activity生命周期 在Activity中重载下图中9种事件函数,在调用不同函数时使用LogCat在Eclipse 的控制台中输出调用日志。掌握Activity在启动、停止和销毁等不同阶段,9种重载函数的调用顺序,并掌握Android调试工具LogCat的使用方法。 实验3:组件通信 设计一个主Activity和一个子Activity(Sub-Activity),使用主Activity上的按钮启动子Activity,并将子Activity的一些信息返回给主Activity,并显示在主Activity上,亦可以自己设计界面和场景,也可以使用下面提供的内容。主Activity 界面上有一个“登录”按钮和一个用了显示信息的TextView,点击“登录”按钮后打开一个新的Activity,新Activity上面有输入用户名和密码的控件,在用户关闭这个Activity后,将用户输入的用户名和密码传递到主Activity,并显示在主Activity的TextView中。 实验4:数据存储 应用程序在使用过程中会被用户或系统关闭,如果能够在程序关闭前保存用户输入的信息,就可以在程序再次启动程序时恢复这些信息,进而提升用户体验。(1)尝试使用SharedPreferences在程序关闭时保存用户输入的信息,并在程序重新启动时自动恢复这些信息。(2)以INI文件的形式,将数据保存在内部或外部存储器上,实现相同的功能 要求和说明 需要提交实验报告和光盘,时间地点与大作业相同。 (各班统一制作一张光盘,每人的目录名:班级_学号_姓名,例如“05_6965_陈再界”)。 光盘内含:源程序文件和apk文件;电子版实验报告。 实验报告:四个实验合订到一本,A4双面打印文档一份,统一封面。

安卓大作业

《Android应用程序开发》 大作业 题目:五子棋游戏的设计与实现 专业:网络工程 学号:131007140 学生姓名:朱一萍 指导教师:齐兵辉 完成日期:2015-11-25

目录 1开发背景 (1) 2.需求分析 (1) 2.1功能需求 (1) 2.2性能需求软件环境: (1) 3.概要设计 (1) 4.棋盘、棋子的绘制 (1) 5.游戏核心设计 (2) 5.1手机选择落子位置 (2) 5.2判断游戏的输赢 (2) 6.运行截图 (2) 7.核心代码 (5) 7.1首界面 (5) 7.2棋盘、棋子的初始化等 (6) 7.3 判断输赢 (8) 7.4手机落子算法 (10)

1开发背景 每个人手机上都有手机游戏,上下班以及无聊闲暇时,游戏是人们娱乐的一种方式。Android 平台下的手机游戏更是受到顾客的青睐,手机游戏不仅玩起来比较方便,还有助于开发我们的思维,使大家在娱乐的同时也增长了见识,拓展了思维。五子棋对思维及协调能力有益,能使我们注意力集中,耐心也有明显的提升,培养我们的逻辑思维能力,对智力及记忆力都很有帮助。 2.需求分析 2.1功能需求 1.适合不同阶段的玩家(新手和熟手) 2.玩家和手机对弈 2.2性能需求软件环境: 1.硬件环境:PC机 2Windows XP、Android 2.1 以上 3.概要设计 五子棋分三个模块:开始游戏、设置、退出。 1.开始游戏: 点击进入游戏 2.游戏设置: 音效设置:开启/关闭背景音乐、开启/关闭音效 难度设置:简单,中等,较难 3.退出游戏 关闭游戏 4.棋盘、棋子的绘制 本设计中棋盘的设置采用drawLine(float startX,floatstartY,floatstopX,floatstopY,Paint paint)画线,参数一起始点的X轴位置,参数二起始点的Y轴位置,参数三终点的水平位置,参数四垂直位置,最后的一个参数为Paint画刷对象。 本设计中棋子是用drawCircle在坐标上绘制一个经典几何图形。先判断是否有棋,是黑子还是白子,然后判断是那个坐标,然后调用drawCircle绘制棋子 canvas.drawCircle(float,float,float,Paint)方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔。

最全的Android源码目录结构详解

最全的Android源码目录结构详解 Android 2.1 |-- Makefile |-- bionic (bionic C库) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发包配置) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- development (应用程序开发相关) |-- external (android使用的一些开源的模组) |-- frameworks (核心框架——java及C++语言) |-- hardware (部分厂家开源的硬解适配层HAL代码) |-- out (编译完成后的代码输出与此目录) |-- packages (应用程序包) |-- prebuilt (x86和arm架构下预编译的一些资源) |-- sdk (sdk及模拟器) |-- system (底层文件系统库、应用及组件——C语言) `-- vendor (厂商定制代码) bionic 目录 |-- libc (C库) | |-- arch-arm (ARM架构,包含系统调用汇编实现) | |-- arch-x86 (x86架构,包含系统调用汇编实现) | |-- bionic (由C实现的功能,架构无关) | |-- docs (文档) | |-- include (头文件) | |-- inet (?inet相关,具体作用不明) | |-- kernel (Linux内核中的一些头文件) | |-- netbsd (?nesbsd系统相关,具体作用不明) | |-- private (?一些私有的头文件) | |-- stdio (stdio实现) | |-- stdlib (stdlib实现) | |-- string (string函数实现) | |-- tools (几个工具) | |-- tzcode (时区相关代码) | |-- unistd (unistd实现) | `-- zoneinfo (时区信息) |-- libdl (libdl实现,dl是动态链接,提供访问动态链接库的功能)|-- libm (libm数学库的实现,) | |-- alpha (apaha架构) | |-- amd64 (amd64架构) | |-- arm (arm架构) | |-- bsdsrc (?bsd的源码)

Java大作业设计报告

《Java程序设计》大作业设 计报告 设计名称多人聊天室 组员姓名 学生班级 设计时间 2013.12.15 设计成绩

一、问题描述及设计思路 设计多人聊天程序,能进行多人实时聊天,其中服务器为PC端,客户端为安卓端。 在服务器上,不断监听来自客户端的接入请求,对于接入的客户端加入线程池,同时为之开启独立线程,等待从该客户端发来的信息,再转发给其他客户端。 在客户端上,首先布局简单的安卓界面,开启客户端并且登录后,设置button 按钮监听想服务器发送信息请求,同时开启独立线程接收来自服务器的信息(即来自其他客户端的信息)。 二、详细设计过程 服务器开发 1.首先,导入了我们完成服务器端所要完成的各种类: 能,辅助以GUI界面进行美化。 2.在Server类里面的私有成员函数里,有以下定义: 程运行做准备, 同时创建了一个广义的ArrayListvector,用来存放客户端的套接字。创建了两个file类的文件,分别用于记录客户端的链接信息和保存客户端的聊天记录。

一个独立的线程,互不干扰。接下来则是采用GUI组件进行简单的界面设计,在try-catch块里完成主要功能。 首先,采用ServerSocket serverSocket = new ServerSocket(port);建立套接字,一旦建立成功,则在服务器端的界面上会出现创建的日期信息。又使用Socket socket = serverSocket.accept();连接客户端,采用while语句不断监听客户端连接,收到请求后,则在服务器端显示客户端的信息,如连接到服务器的时间,客户端的主机名称和IP地址,这些信息会被写进txt文本进行保存。 mExecutorService.execute(new Thread (newHandleAClient(socket)));则是向线程池中添加线程,这里使用了一个内部类HandleAClient用于处理服务器和单独一个客户端之间的问题。请看下面的继续解析。 4.采用一个内部类HandAClient完成一个客户端和服务器之前互相传输信息的

android期末考大题(沈阳师范大学)

1.SQLite数据库 public class MySqliteDB extends SQLiteOpenHelper { public MySqliteDB(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version);} public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists people ("+"pid integer primary key,"+ "pname text,"+"page integer)");} public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}} public class MainActivity extends Activity { Button btn;MySqliteDB mydb; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.sodocs.net/doc/ed17452773.html,yout.activity_main); mydb=new MySqliteDB(this, "MyDB", null, 1); btn=(Button)findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { SQLiteDatabase db=mydb.getReadableDatabase();}});} public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true;}} 2.添加ToggleButton public class Example_55 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(https://www.sodocs.net/doc/ed17452773.html,yout.main); ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); toggleButton.setChecked(true); 3.Spinner下拉列表框

相关主题