zoukankan      html  css  js  c++  java
  • Android开发视频教学_第二季_读书笔记

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

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

    本人练习码:https://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。

  • 相关阅读:
    架构设计-业务逻辑层简述
    大牛的法宝
    架构设计中服务层的简单理解
    架构师都要懂哪些知识
    python 面向对象
    Ubuntu学习
    装饰器
    Py之基础数据类型
    Py之模块
    浏览器环境变量
  • 原文地址:https://www.cnblogs.com/vipcjob/p/2370116.html
Copyright © 2011-2022 走看看