Android开发视频教学_第二季_读书笔记

视频下载地址:http://www.verycd.com/topics/2837883/

源码下载地址:http://www.mars-droid.com/bbs/forum.php?mod=viewthread&tid=14&extra=page%3D1

本人练习码:http://files.cnblogs.com/vipcjob/Android第二季练习.rar

 

快捷键:

ctrl + shift + o ,导入命名空间,import …

alt + / ,智能提示,补足名称

ctrl + shift + f ,格式化代码

 

DEBUG

IE打开的帮助文档很慢,最后换了FF就好了

strings.xml出现异常,string节点错写成stirng,还有android、layout_width等拼错了。把layout中的控件id改完之后,R.java的值没有变化,解决办法,把gen删掉,重新运行后gen自动重新生成,如果没有,改一下xml再保存,gen重新生成。

 

目录结构

src:代码源文件。

gen:android自动生成的资源ID标识(针对每一个res文件)

res:资源文件。

layout,布局文件。每一个activity都对应有一个layout文件。setContentView(R.layout.main);

       values-strings.xml变量定义。

AndroidManifest.xml:应用程序配置文件。用到gen-R中的变量名。

 

01 Spinner

Android的下拉框。

1.strings.xml变量:<string-array @name><item>…</item>…</string-array>.

2.main.xml控件:<Spinner @id @width @height @prompt/>

3.activity.java适配器:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(…);

adapter.setDropDownViewResource(…);

spinner.setAdapter(adapter);

4.点击事件:

       public class MyOnItemSelectedListener implements OnItemSelectedListener{…}

       spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

5.动态绑定:

       a.自定义一个item.xml。新建一个LinearLayout,定义一个TextView(tvId)。

       b.绑定:

List<String> list=new ArrayList<String>(); //list.add(“item1”);

ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item,R.id.tvId,list);

 

02_1 DataPickerDialog

1.创建显示文本和点击按钮,定义按钮事件,触发showDialog(…)事件。

2.showDialog会调用重写的onCreateDialog方法,在onCreateDialog中返回一个new DatePickerDialog(this, myDateSetListener, mYear, mMonth,mDay); 这里可以加入设置时间里的监听事件,也可以为null,即什么也不做。

3.定义DatePickerDialog的OnDateSetListener事件,重写onDateSet方法,做一些设置完成后的显示动作。

4.获取当前时间:

Calendar c = Calendar.getInstance(); //得到当前时间对象

再用c.get方法获取,参数通过常变量去取。如c.get(Calendar.YEAR),还有MONTH,DAY_OF_MONTH。

类TimePicker

 

02_2 AutoCompleteTextView

1.定义自动完成框(下拉部分)的样式,新建list_item.xml,画一个TextView

2.在main.xml中创建AutoCompleteTextView

3.定义数据源

a.static final String[] Countries = new string[] {….}

b.List<String> Countries = new ArrayList<String>();

c.也可以在strings.xml中定义string-array数组。

       String[] Countries = getResources().getStringArray(R.array.countries_array);

4.绑定数据:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,Countries);

textView.setAdapter(adapter);

 

03 ExpandableListActivity、SimpleExpandableListAdapter

1.在main.xml中声明ExpandableListActivity控件:

一个显示数据的ExpandableListView和一个ID为android:id="@id/android:empty"的显示控件,如TextView

2.新建group.xml分组样式文件和child.xml子项样式文件

3.创建一个Activity,继承ExpandableListActivity

4.为group和child创建数据

List<Map<String,String>> groupList = new ArrayList<Map<String,String>>();  //分组

List<List<Map<String, String>>> childLists = new ArrayList<List<Map<String, String>>>();  //子项s

SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this,

groupList, R.layout.group, new String[]{"group"},new int[]{R.id.tv_group},

childLists, R.layout.child, new String[]{"country"}, new int[]{R.id.tv_child});

 

04 SeekBar和RatingBar

SeekBar,可拖动的进度条,如播放器的进度条。

1.在main.xml中创建SeekBar,设置Max为100

2.创建事件监听器SeekBarListener implements SeekBar.OnSeekBarChangeListener {…}

onProgressChanged,进度条发生变化时(有fromUser参数标识是否来至用户的操作)。onStartTrackingTouch,开始拖动时(点下鼠标时)。onStopTracking,结束拖动时(松开鼠标时)。

 

RatingBar,评分的星星条

1.创建RatingBar,定义属性:numStarts,总星星数;stepSize,每次移动多少个

2.定义事件监听器RatingBarListener implements RatingBar.OnRatingBarChangeListener{…}

 

05 appwidget

即窗口小部件。启动模拟器,解锁,点击桌面不放,会弹出“添加到主屏幕”,其中的“窗口小部件“即是。

比如在桌面上放置一个时钟。要实现时钟转动变化,需要定义一个广播事件。

1.定义AppWidgetProviderInfo:在res下新建一个xml文件夹,添加文件example_appwidget_info.xml。

这个文件用来描述AppWidget的高度、宽度、刷新间隔、具体的布局样式文件等。

2.定义具体的布局文件example_appwidget.xml(在桌面显示出来的样子)

3.在AndroidManifest.xml中声明receiver。

它的名字是实现AppWidgetProvider的类的类名,intent-filter中的action是系统自带的用于更新所有appwidget的广播动作android.appwidget.action.APPWIDGET_UPDATE。meta-data是描述,name是固定的android.appwidget.provider,android:resource="@xml/example_appwidget_info "指定描述信息的位置。

4.实现类ExampleAppWidgetProvider extends AppWidgetProvider {…}

onUpdate:经到达指定的更新时间之后或者当用户向桌面添加AppWidget时

onDeleted:当AppWidget被删除时

OnEnabled:当一个AppWidget的实例第一次被创建时

OnDisabled:当最后一个AppWidget实例被删除后(如在桌面拉出多个图标后全部删除)

OnReveice:接收广播事件,根据参数决定调用以上四个方法中的哪一个

 

06 PendingIntent、RemoteViews

例子:实现AppWidget与程序交互。在AppWidget中添加一个按钮,并执行事件,打开一个Activity。

1.在example_appwidget.xml中加入一个Button。

2.为按钮绑定监听器,在ExampleAppWidgetProvider.java中添加onUpdate处理事件。

Intent intent = new Intent(context, AppWidgetActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent, 0);  //定义动作

RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_appwidget);

//用RemoteViews可以获得不在同一进程中的appWidget对象

remoteViews.setOnClickPendingIntent(R.id.widgetButtonId,pendingIntent);  //绑定事件

appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);//更新appWidget,为它附加事件

 

07 AppWidget

实现:a.接受来自AppWidget的广播

1.在AppWidgetProvider中自定义一个Action

2..在AndroidManifest.xml中为AppWidgetProvider注册新的intent-filter,action的name为自定义Action值

3.创建Intent对象,设置Action,使用getBroadcast()方法创建一个PendingIntent

4.为AppWidget绑定PendingIntent事件,更新它。

5.在onReceive方法当中接收广播消息,处理事件

 

实现:b.更新AppWidget当中控件的状态

1.AppWidget发送广播(intent.setAction),程序接收广播,在这个onReceive中改变AppWidget的状态

2.在RemoteViews类对象当中有一系列的方法可以更新控件

3.在使用RemoteViews更新控件状态之后,需要使用AppWidgetManager通知AppWidget进行更新

 

08 Animations

总体分两类:

1.Tweened Animations,渐变动画。做旋转Rotate,移动Translate,缩放Scale,淡入淡出Alpha;

       2.Fame-by_Frame Animations,帧动画。创建一个Drawable序列,可以按指定的时间间歇地逐个显示。

注意是import android.view.View.OnClickListener,不是android.content.DialogInterface.OnClickListener

1.创建一个AnimationSet对象(可以添加多个Animation,设置每一个动画的通用属性值)

       a.setDuration 持续时间

       b.setFillAfter 参数为true时,动画执行后,控件保持结束的状态

       c.setFillBefor 参数为true时,动画执行后,控件将回到执行之前的状态

       d.setStartOffSet 执行动画之前的等待时间

       e.setRepeatCount 执行次数

2.创建相应的Animation对象,设置相应的动作参数

3.将Animation对像添加到AnimationSet 对象中。

4.使用控件对象开始执行AnimationSet

 

09 Animations

利用xml文件实现动画,好处:多个控件可以共同使用一个动画效果

在res下新建文件夹anim,建立四个动画对应的xml文件,按钮事件彩用AnimationUtils.loadAnimation方法

Rotate的android:pivotX值有三种设置方法:

a.android:pivotX=“50” 绝对位置定位

       b.android:pivotX=“50%” 相对控件本身定位

       c.android:pivotX=“50%p” 相对于控件的父控件定位

 

10 Animations2

关于AnimationSet(Animation的子类)、Interpolator(前后变化快慢不同)、Frame-By-Frame Animations

1.AnimationSet添加单个动画的做法可以用Animation绑定动画xml来代替

2.在动画xml中,set节点有个interpolator属性,用来设置动画的效果(加速或减速);shareInterpolator用来控制set中包含的动画效果是否应用此设置(即相当于AnimationSet的构造函数的bool参数,可以用AnimationSet.setInterpolator设置interpolator)如果为false,则需要在每个动画上指定属性andorid:interpolator。

       a.AccelerateDecelerateInterpolator,前后慢,中间加速

       b.AccelerateInterpolator,开始慢,然后加速

       c.CycleInterpolator,动画循环播放特定的次数,速度改变沿着正弦曲线

       d.DeceleraInterpolator,开始快,然后减速

       e.LinearInterpolator,均匀变化

3. 在drawable-ldpi中加入动画图片文件,创建动画xml文件,用animation-list组合动画,它的属性oneshot为true时表示只播放一次。用setBackgroundResource和AnimationDrawable实现实例。

 

11 Animations3

关于LayoutAnimationController、ListView与Animations结合、AnimationListener

实例:ListView选项动态显示

1.创建一个ListActivity,在main中创建一个ListView,id使用@id/android:list,可以用getListView()得到它2.定义一个item.xml做为选项的显示样式,定义数据源BuildListAdapter,实现绑定显示setAdapter。

3.实现动画显示:

       a.xml实现:创建list_anim.xml作为动画效果,list_anim_layout.xml作为LayoutAnimationController,它的android:animation指向list_anim,表示执行的动画效果。在要实现动画的ListView控件中加入属性android:layoutAnimation,指向这个controller。

       b.代码实现:即换成代码去指定ListView的layoutAnimation属性。同理,利用创建的list_anim.xml创建一个Animation对象,然后新建一个LayoutAnimationController,用Animation对象初始化它,再设置controller的order和delay等属性,最后用ListView对象的setLayoutAnimation方法绑定即可。

实例:用AnimationListener实现删除和添加图片前的淡入淡出效果

       1. AnimationListener用于监听动画执行,主要有onAnimationEnd,onAnimationRepeat,onAnimationStart。

       2.创建一个RelativeLayout并赋ID值,添加一个ImageView,两个功能按钮。

       3.删除的淡出:在删除按钮的监听事件中,先加入一个淡化的动画效果,然后再为ImageView 对象指定一个AnimationListener,在这个AnimationListener的onAnimationEnd事件中删除ImageView对象。添加同理。

 

 

12 Json数据解释

需要安装google的json插件,下载地址:http://code.google.com/p/google-gson/downloads/list

把zip下载,解压。项目中新建一个文件夹libs,把json-2.1jar复制进去。右键此jar,build path-add to build path。

a.json解释初探:

1.创建一个json解释类JsonUtils.java,定义方法ParserJson

2.创建一个按钮,并添加事件,解释json对象

b.利用api把json转成一个类对象

1.创建一个User类

2.创建ParserJosnToUser方法,利用Gson类实现

c.把json转成一个类数组

1.创建ParserJsonToListUser,利用TypeToken<LinkedList<User>>实现

2.在历遍的时候,for后面利用自动完成功能alt+/,选择for-iterate over collection。

你可能感兴趣的:(Android开发)