黑马程序员技术交流社区

标题: 【长沙校区】十年磨一剑【基哥笔记】Android基础—Day09 [打印本页]

作者: allen927    时间: 2015-12-12 15:56
标题: 【长沙校区】十年磨一剑【基哥笔记】Android基础—Day09
本帖最后由 allen927 于 2015-12-12 16:00 编辑


同样的课程、老师、就业,更好的学习环境,更低的学习成本!
内地学员,选择长沙校区,靠谱!!!
报名热线:0731-85833115
  QQ  : 2355535415

android基础Day09(多媒体)

资源总连接:http://bbs.itheima.com/thread-249703-1-1.html

(了解)计算机图形表示原理
图片:宽                                                                                   
图片是由每个像素点来组成   像素点:小方块  
图片的大小:宽**每个像素点的大小


(掌握)SdCard加载图片显示

(了解)加载大图片OOM异常

内存溢出

本身的大小:2.65MB
dalvik vm:默认16M   

解决的思路:


(掌握)缩放加载大图片


(了解)图形处理的原理
对图片进行一些简单的处理:
进行旋转   进行平移   缩放
绘图的操作:
android里面所有的显示效果都是绘制出来的。

绘制图片:
操作对象才可以: 有绘图的类
Canvas  :画布    画板       
Paint :画笔   设置颜色   

bitmap:要绘制的图形
paint:
matrix: Matrix 把图片绘制成什么效果。  矩阵  
大学:线性代数   矩阵的运算              
android设计了Matrix这个类  该类里面就封装了一些方法可以对图片进行处理。
3x3的矩阵

(掌握)图形的旋转

ScrollView只能有一个子节点



public class MainActivity extends Activity{

       privateImageView iv_old;
       privateImageView iv_new;
       privateBitmap bitmap;

       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);

              iv_old= (ImageView) findViewById(R.id.iv_old);
              iv_new= (ImageView) findViewById(R.id.iv_new);

              //原图
              bitmap= BitmapFactory.decodeFile("/sdcard/mm.jpg");
              iv_old.setImageBitmap(bitmap);

       }

       publicvoid load(View v){
              //创建空白的图片   要和原图的大小一样
              Bitmap bit = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());

              //把图片进行旋转处理
              Canvascanvas = new Canvas(bit);//画布  传递的参数必须是一个空白的图片
              Paintpaint = new Paint();//画笔
              Matrix matrix = new Matrix();//矩阵
              //旋转30  以图片的中心为圆心
              matrix.setRotate(30, bitmap.getWidth()/2,bitmap.getHeight()/2);  
              canvas.drawColor(Color.WHITE);//绘制背景为白色
              canvas.drawBitmap(bitmap, matrix, paint);//绘制图片

              //显示
              iv_new.setImageBitmap(bit);
       }

}

(掌握)图片的平移和缩放
平移


缩放


(掌握)图片画画
涂鸦操作

public class MainActivity extends Activity{

       publicstatic final String TAG = "MainActivity";

       privateImageView iv;

       privateBitmap bitmap;

       privateBitmap bit;

       privateCanvas canvas;

       privatePaint paint;
       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);

              iv= (ImageView) findViewById(R.id.iv);
              //获取原图
              bitmap= BitmapFactory.decodeFile("/sdcard/mm.jpg");

              /**
               * 1 创建空白的图片
               * 2 构建Canvas
               * 3 构建画笔
               * 4 画图片
               * 5 画线
               * 6 显示图片
               */
              //1 创建空白的图片
              bit = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());
              
              //2 构建Canvas
              canvas = new Canvas(bit);
              
              //3 构建画笔
              paint = new Paint();
              
              paint.setColor(Color.GREEN);//设置画笔的颜色   绿色
              
              //4 画图片
              canvas.drawBitmap(bitmap, new Matrix(), paint);
              
              //5 画线
//            canvas.drawLine(0, 0, 100, 100, paint);
              
              //6 显示图片
              iv.setImageBitmap(bit);


              //给图片设置触摸的监听
              iv.setOnTouchListener(new MyOnTouchListener());

       }

       //触摸的监听器
       privateclass MyOnTouchListener implements OnTouchListener{

              //记录按下的点
              privatefloat startX,startY;

              @Override
              publicboolean onTouch(View v, MotionEventevent) {
                     switch(event.getAction()) {//判断事件的动作
                     case MotionEvent.ACTION_DOWN://按下
                            Log.i(TAG,"按下");
                            //获取按下点的坐标
                            startX = event.getX();
                            startY = event.getY();
                            break;
                     caseMotionEvent.ACTION_MOVE://移动
                            Log.i(TAG,"移动");
                            //获取移动的点
                            float stopX = event.getX();
                            float stopY = event.getY();
                            //画线
                            canvas.drawLine(startX, startY, stopX,stopY, paint);
                            //显示图片
                            iv.setImageBitmap(bit);

                            //把移动的点置为开始点
                            startX = stopX;
                            startY = stopY;

                            break;
                     caseMotionEvent.ACTION_UP://弹起
                            Log.i(TAG,"弹起");
                            break;

                     default:
                            break;
                     }
                     return true;//自己处理触摸事件
              }

       }


       publicvoid save(View v){
              //保存一张图片到sdcard     操作sdcard
              try{
                     File file = new File(Environment.getExternalStorageDirectory(),"temp.jpg");
                     OutputStream stream = newFileOutputStream(file);
                     bit.compress(CompressFormat.JPEG, 100, stream);


                     //希望图片保存后  android系统的自带的Gallery应用里面可以看到
                     /**
                      * 原理:MediaProvider应用里面有一个广播接收者   该接收者 接收到广播  就可以扫描sdcard
                      *     相册里面的数据是查询了MediaProvider应用
                      * 操作:发广播给相册应用里面的广播接收者
                      *        <receiver android:name="MediaScannerReceiver">
                                        <intent-filter>
                                            <actionandroid:name="android.intent.action.BOOT_COMPLETED" />
                                        </intent-filter>
                                        <intent-filter>
                                            <actionandroid:name="android.intent.action.MEDIA_MOUNTED" />
                                            <dataandroid:scheme="file" />
                                        </intent-filter>
                                        <intent-filter>
                                            <actionandroid:name="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
                                            <dataandroid:scheme="file" />
                                        </intent-filter>
                                    </receiver>
                      *
                      */
                     //发送广播
                     Intent intent = new Intent();
                     intent.setAction("android.intent.action.MEDIA_MOUNTED");
                     File dir =Environment.getExternalStorageDirectory();
                     intent.setData(Uri.fromFile(dir));
                     sendBroadcast(intent);
              }catch (Exception e) {
                     e.printStackTrace();
              }
       }

}

(掌握)图片颜色处理-Android版本美图秀秀
图片是有颜色:
#f00 #ff0000 #ffff0000  
argb :三基色  alpha   red  green   blue  

颜色的范围:0-256   最大值:256

核心原理:重绘图片

改变图片的颜色就是对画笔进行操作

图片的颜色:矩阵ColorMatrix  
5x4的矩阵   4 5

public class MainActivity extends Activity{

       privateImageView iv;
       privateBitmap bit;
       privateCanvas canvas;
       privatePaint paint;
       privateBitmap bitmap;

       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              iv= (ImageView) findViewById(R.id.iv);
              SeekBarsb_red = (SeekBar) findViewById(R.id.sb_red);
              SeekBarsb_green = (SeekBar) findViewById(R.id.sb_green);
              SeekBarsb_blue = (SeekBar) findViewById(R.id.sb_blue);
              SeekBarsb_alpha = (SeekBar) findViewById(R.id.sb_alpha);

              bitmap= BitmapFactory.decodeFile("/sdcard/mm.jpg");
              iv.setImageBitmap(bitmap);

              //给拖动条设置最大值
              sb_red.setMax(256);
              sb_green.setMax(256);
              sb_blue.setMax(256);
              sb_alpha.setMax(256);

              //设置滑动改变监听
              MyOnSeekBarChangeListenerl = new MyOnSeekBarChangeListener();
              sb_red.setOnSeekBarChangeListener(l);
              sb_green.setOnSeekBarChangeListener(l);
              sb_blue.setOnSeekBarChangeListener(l);
              sb_alpha.setOnSeekBarChangeListener(l);

              bit= Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),bitmap.getConfig());
              canvas= new Canvas(bit);
              paint= new Paint();

       }

       privateclass MyOnSeekBarChangeListener implements OnSeekBarChangeListener{

              privatefloat r=1,g=1,b=1,a=1;

              //在拖动的过程中一直调用
              @Override
              publicvoid onProgressChanged(SeekBar seekBar, int progress,
                            booleanfromUser) {
                     switch(seekBar.getId()) {
                     caseR.id.sb_red:
                            r= (256 - progress)/(float)256;
                            break;
                     caseR.id.sb_green:
                            g= (256 - progress)/(float)256;
                            break;
                     caseR.id.sb_blue:
                            b= (256 - progress)/(float)256;
                            break;
                     caseR.id.sb_alpha:
                          //透明 当用户拖动到最大  图片完全看不见  0   progress 256  范围:0 - 1  
                            a= (256 - progress)/(float)256;
                            break;

                     default:
                            break;
                     }
                     ColorMatrix matrix = new ColorMatrix();//颜色矩阵
                     matrix.set(new float[]{
                                   r,0,0,0,0,//red
                                   0,g,0,0,0,//green
                                   0,0,b,0,0,//blue
                                   0,0,0,a,0 //alpha   0-1   要把256换算为1  
                     });
                     ColorMatrixColorFilter filter = newColorMatrixColorFilter(matrix);
                     paint.setColorFilter(filter);
                     canvas.drawBitmap(bitmap, new Matrix(), paint);
                     iv.setImageBitmap(bit);
              }

              //开始拖动
              @Override
              publicvoid onStartTrackingTouch(SeekBar seekBar) {

              }

              //停止
              @Override
              publicvoid onStopTrackingTouch(SeekBar seekBar) {

              }

       }


}

需要在4.0的模拟器上进行演示

(掌握)音乐播放器API
MediaPlayer


(了解)音乐播放器方法调用时序图


(掌握)视频播放器
MediaPlayer本身能力是不足的。mp4  3gp     
avi:执行视频的转码   
如果现在你有真机测试  发现可以播放avi ,手机定制商 已经对MediaPlayer类进行修改
测试要在4.0的模拟器

public class MainActivity extends Activity{

       privateEditText et_path;
       privateMediaPlayer mp;
       privateSurfaceView surfaceView;

       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);

              surfaceView= (SurfaceView) findViewById(R.id.surfaceview);
              //亮屏
              surfaceView.setKeepScreenOn(true);

              SurfaceHolder holder = surfaceView.getHolder();
              //SurfaceView把获取的信息直接输出
              holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

              et_path= (EditText) findViewById(R.id.et_path);
              mp= new MediaPlayer();
              mp.reset();//重置
       }

       publicvoid play(View v){
              Stringpath = et_path.getText().toString().trim();
              if(TextUtils.isEmpty(path)){
                     Toast.makeText(this,"歌曲名称为空",0).show();
              }else{
                     try{
                            mp.reset();
                            mp.setDataSource(path);//设置要播放的资源
                            mp.setDisplay(surfaceView.getHolder());//设置显示
                            mp.prepareAsync();//异步准备
                            //设置准备完成的监听
                            mp.setOnPreparedListener(newMediaPlayer.OnPreparedListener() {

                                   @Override
                                   publicvoid onPrepared(MediaPlayer mp) {
                                          mp.start();
                                   }
                            });
                     }catch (Exception e) {
                            //TODO Auto-generated catch block
                            e.printStackTrace();
                     }
              }
       }

       publicvoid pause(View v){
              Buttonbt = (Button) v;
              if(mp.isPlaying()){
                     //点击暂停
                     bt.setText("继续");
                     mp.pause();//暂停
              }else{
                     //点击继续
                     bt.setText("暂停");
                     mp.start();//继续播放
              }
       }

       publicvoid stop(View v){
              mp.stop();//停止
       }

       publicvoid replay(View v){
              //重播
              try{
                     mp.stop();
                     mp.setDisplay(surfaceView.getHolder());//设置显示
                     mp.prepare();//准备
                     mp.seekTo(0);//跳转到开始位置开始播放
                     mp.start();//播放
              }catch (Exception e) {
                     //TODO Auto-generated catch block
                     e.printStackTrace();
              }
       }


       @Override
       protectedvoid onDestroy() {
              super.onDestroy();
              mp.stop();
              mp.release();//释放资源
              mp= null;
       }



}

(掌握)surfaceview
SurfaceView:他是一个控件   
作用:用来显示动态的画面   mp4   相机  游戏   






(掌握)surfaceview的生命周期
Activity完全显示之后才创建,当activity暂停后,该控件就会被销毁。




(掌握)照相机



public class MainActivity extends Activity{

       private Camera camera;

       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              SurfaceViewsurfaceView = (SurfaceView) findViewById(R.id.surfaceview);
              surfaceView.setKeepScreenOn(true);
              SurfaceHolderholder = surfaceView.getHolder();
              holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
              //添加监听
              holder.addCallback(newCallback() {

                     @Override
                     publicvoid surfaceDestroyed(SurfaceHolder holder) {
                            camera.release();//释放资源
                            camera = null;
                     }

                     @Override
                     publicvoid surfaceCreated(SurfaceHolder holder) {
                            try{
                                   //打开相机
                                   camera = Camera.open();//默认打开的是后置摄像头
                                   camera.setPreviewDisplay(holder);//设置预览显示
                                   camera.startPreview();//开始预览
                            }catch (Exception e) {
                                   //TODO Auto-generated catch block
                                   e.printStackTrace();
                            }
                     }

                     @Override
                     publicvoid surfaceChanged(SurfaceHolder holder, int format, int width,
                                   intheight) {

                     }
              });
       }


       publicvoid focus(View v){
              //自动对焦
              camera.autoFocus(null);//对焦功能都是由硬件来完成
       }
       publicvoid takepicture(View v){
              //拍照
              //shutter快门   raw 相机捕获的原始数据      jpeg 相机处理后的数据   都是接口
              camera.takePicture(null, null, new Camera.PictureCallback() {

                     @Override
                     publicvoid onPictureTaken(byte[] data, Camera camera) {
                            try{
                                   //把数据保存 sdcard   sdcard写权限
                                   Filefile = newFile(Environment.getExternalStorageDirectory(),"wuhan06.jpg");
                                   FileOutputStreamfos = new FileOutputStream(file);
                                   fos.write(data);
                                   fos.close();
                                   //相机在拍照后 需要处理图片   相机就被占用了
                                   //重新又画面
                                   camera.startPreview();

                            }catch (Exception e) {
                                   //TODO Auto-generated catch block
                                   e.printStackTrace();
                            }
                     }
              });
       }
}


(掌握)录音机|录像机

public class MainActivity extends Activity{

       privateMediaRecorder recorder;
       privateSurfaceView surfaceView;

       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);

              surfaceView= (SurfaceView) findViewById(R.id.surfaceview);
              surfaceView.setKeepScreenOn(true);
              surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
       }

       publicvoid start(View v) {
              try{
                     //媒体刻录器
                     recorder= new MediaRecorder();
                     //设置音频的来源  麦克风
                     recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                     recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//设置视频的来源  相机
                     //文件输出的格式 3gp
                     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                     //设置音频的编码格式
                     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                     //设置视频的编码格式
                     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
                     Filefile = newFile(Environment.getExternalStorageDirectory(),"shiping.3gp");
                     //指定文件输出的路径
                     recorder.setOutputFile(file.getAbsolutePath());
                     //设置预览显示
                     recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
                     recorder.prepare();//准备
                     recorder.start();// 开始刻录
              }catch (Exception e) {
                     //TODO Auto-generated catch block
                     e.printStackTrace();
              }
       }

       publicvoid stop(View v) {
         recorder.stop();//停止
         recorder.reset();//重置
         recorder.release();//释放
         recorder = null;
       }
}


(掌握)传感器
传感器:他是一种硬件设备   
声音     重力   距离  温度   速度  。。。
android系统在设计api的时候,就已经对传感器进行了支持。
传感器类型:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。
方向传感器:   Sensor.TYPE_ORIENTATION
加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER
光线传感器:    Sensor.TYPE_LIGHT
磁场传感器:   Sensor.TYPE_MAGNETIC_FIELD
距离(临近性)传感器: Sensor.TYPE_PROXIMITY
温度传感器:   Sensor.TYPE_TEMPERATURE
开发的应用:
   1.手机可以根据光的强弱来自动调节屏幕的亮度  
   2.当手机在接听电话的时候,靠近耳朵屏幕变暗
   3.公交车防盗  

增加手机的特色  
集成了很多硬件  

生物智能    。。。

(掌握)传感器案例-距离传感器
android设计了api
传感器:Sensor
传感器管理器:SensorManager      TelephonyManager  是一个系统服务
public class MainActivity extends Activity{

       publicstatic final String TAG = "MainActivity";
       privateSensorManager sensorManager;
       privateSensor sensor;
       privateMySensorEventListener listener;

       @Override
       protectedvoid onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              findViewById(R.id.tv).setKeepScreenOn(true);

              //传感器管理器
              sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
              //距离传感器
              sensor= sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
       }

       @Override
       protected void onResume() {
              super.onResume();
              listener = new MySensorEventListener();
              //监听  SensorManager.SENSOR_DELAY_GAME 事件的传输速率
              sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);
       }
      
       @Override
       protected void onPause() {
              super.onPause();
              //取消监听
              sensorManager.unregisterListener(listener);
       }

       privateclass MySensorEventListener implements SensorEventListener{

              //sensor值的改变
              @Override
              publicvoid onSensorChanged(SensorEvent event) {
                     float[] values = event.values;
                     floatdistance = values[0];
                     Log.i(TAG,"distance:"+distance+"厘米");
              }

              //精确度的改变
              @Override
              publicvoid onAccuracyChanged(Sensor sensor, int accuracy) {

              }

       }

}

作业

现在按钮变为  正在下载    下载完成。
知识点:
1 刷新界面   adapter.notifyDataSetChange();
2 刷新就会自动调用getView()方法
3 记录条目的位置

下载资源

Doc笔记
课程视频代码
作业视频代码





作者: 邓娇林    时间: 2015-12-12 15:59
沙发
作者: 焦钰老师    时间: 2015-12-12 16:03

作者: 孤独成瘾    时间: 2015-12-12 21:28
真的不错,何止是6,简直是6的不行
作者: vip003    时间: 2015-12-12 22:01

作者: mm2015    时间: 2015-12-12 22:23
                        
作者: sorry88886    时间: 2015-12-12 23:33
看眼界 长见识。我还是基础班!
作者: Davidchen    时间: 2015-12-13 01:27
沙发6666666
作者: peiyanda    时间: 2015-12-13 22:56
mark一下!
作者: xiaoxiao2015    时间: 2015-12-14 10:40
基础班飘过
作者: huaduwuzhe    时间: 2015-12-14 14:43
不懂啊,期待快点学习
作者: 很急很关键    时间: 2015-12-14 18:16
战略性马克
作者: 月夜飘星    时间: 2015-12-14 18:40
学习学习!
作者: not@good@enough    时间: 2015-12-14 19:37
经典!已收藏,不谢
作者: 百事可乐    时间: 2015-12-14 20:57
6666顶一下
作者: szb    时间: 2015-12-14 23:20
666666666666666666666666666666666666666666
作者: 744919632    时间: 2015-12-15 20:48
学习学习。
作者: 孤独成瘾    时间: 2015-12-15 21:41
不错,学无止境啊
作者: labozx    时间: 2015-12-15 21:42
加油!!!!!!!!青春
作者: labozx    时间: 2015-12-15 21:47
加油!!!!!!!!青春
作者: DaYe    时间: 2015-12-15 22:18
好贴需要顶啊赞赞赞
作者: ChinaTuring    时间: 2015-12-15 22:21
嗯嗯嗯 真心不错啊
作者: 李冰    时间: 2015-12-15 23:53
学习啦  顶顶
作者: 孤独成瘾    时间: 2015-12-16 21:19
学习啦,赞赞赞
作者: pun    时间: 2015-12-16 23:34
将集合转换成数组之后不可以对数组进行下列哪个操作
作者: 王晓亮    时间: 2015-12-17 08:40

作者: laiyubin    时间: 2015-12-17 21:02
非常赞!!!
作者: Mykey    时间: 2015-12-17 22:16
来黑马,学技术
作者: 乐林荫    时间: 2015-12-18 00:30
66666666666666666666666666
作者: 唐洪超    时间: 2015-12-18 11:28
6666666666666666666666666666
作者: ___    时间: 2015-12-18 12:46
66663666336633
作者: ztg    时间: 2015-12-18 18:31
有的地方看不懂,下载下来慢慢看
作者: yipiao    时间: 2015-12-18 20:56
深深的受教!从此以后,就深深的爱上了黑马基哥!
作者: yipiao    时间: 2015-12-18 20:57
加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!
作者: yipiao    时间: 2015-12-18 20:58
青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!青春无悔!
作者: 孤独成瘾    时间: 2015-12-18 21:20
黑马加油,真心不错!!!
作者: wx_KWWw45aw    时间: 2015-12-18 22:43
挺有用 。。。。。。。。。。。
作者: song881224    时间: 2015-12-18 23:29
好多代码,太厉害了
作者: WaterTheGreat    时间: 2015-12-19 08:38
学习学习再学习!牛牛牛!
作者: duluhuang    时间: 2015-12-19 22:07
基哥6666666666666666666666666666666666
作者: xbin0316@qq.com    时间: 2015-12-19 22:48
我也要争取努力进入就业班!
作者: tang9137    时间: 2015-12-19 23:45
黑马加油
作者: 18338762337    时间: 2015-12-20 18:37
学习中,新技能get
作者: lizhaoyu612    时间: 2015-12-20 23:31
这笔记不该在一块的吗
作者: labozx    时间: 2015-12-21 00:26
爱拼才会赢!加油赞一个为努力的人。
作者: WaterTheGreat    时间: 2015-12-21 08:07
基哥威武!!
作者: 长沙-某某    时间: 2015-12-21 10:31
基哥出品  必属精品
作者: ToSina    时间: 2015-12-21 19:27
顶顶 顶顶
作者: 林以    时间: 2015-12-21 20:10
基哥就是牛逼  爱你o
作者: 孤独成瘾    时间: 2015-12-21 21:45

作者: 孤独成瘾    时间: 2015-12-21 21:48

作者: 萨尔萨斯德    时间: 2015-12-22 23:39
真的很不错!
作者: WaterTheGreat    时间: 2015-12-23 23:21
不错不错!!!支持支持!!!
作者: lulu1118    时间: 2015-12-24 08:10
赞赞赞赞
作者: 唐洪超    时间: 2015-12-24 10:35
福利啊!!!!!!!!!!!!!!!!
作者: Yaoluhao01    时间: 2015-12-24 15:58
感谢楼主,太详细了
作者: 一江夜雨    时间: 2015-12-24 19:21
好东西。。。
作者: qinrongchang    时间: 2015-12-25 21:12
顶一贴
作者: cj286    时间: 2015-12-26 15:30
学习了,学习了
作者: 谢光智    时间: 2015-12-26 19:51
好东西。收藏了。
作者: 王如是    时间: 2015-12-27 00:17
heima weiwu
作者: 王如是    时间: 2015-12-27 00:24
黑马威武

作者: yellowbee    时间: 2015-12-27 17:18
这个好贴我找了很久了,赞一个。
作者: 1158147908    时间: 2015-12-27 23:12
好期待上安卓课程
作者: 小小菜菜    时间: 2015-12-28 00:50
菜鸟报道,很高大上.但是现在看不懂,
作者: lh951329230    时间: 2015-12-28 09:19
继续顶。。。。。。
作者: Steve_小海    时间: 2015-12-29 23:35
虽然还没学到这个阶段。但是很激动。一定会的!!!
作者: zhou402981948    时间: 2015-12-30 18:56
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: 李冰    时间: 2015-12-30 22:29
将来的你是最棒的坚持努力努力
作者: 潇湘夜雨    时间: 2015-12-31 20:43
支持楼主,多多分享!
作者: 1050498188    时间: 2016-1-1 00:08
总结的特别好  
作者: Garnet92    时间: 2016-1-1 12:17
加油!!!!好棒哦!!!了解了!!!
作者: 世丐尽头    时间: 2016-1-2 01:00
福利
作者: liyeming    时间: 2016-1-2 23:03
赞一个,加油!
作者: StringBOX    时间: 2016-1-3 17:21

加油!!!!!!!!生命
作者: kangyuewang    时间: 2016-1-3 22:51
666  感谢非常  很有帮助   好
作者: s616622575    时间: 2016-1-3 23:26
好贴就要多多支持
作者: 二五仔    时间: 2016-1-4 09:20
6666866686...
作者: yehua1026    时间: 2016-1-4 18:40
非常好非常好!!!
作者: jidan    时间: 2016-1-4 18:50
嗯嗯嗯 不错不错
作者: txw126    时间: 2016-1-4 19:47
看眼界 长见识。我还是基础班!
作者: li151385    时间: 2016-1-4 22:07
666  我喜欢- -
作者: Smile灬笨笨    时间: 2016-1-5 22:51
好好好厉害
作者: Accoss-x    时间: 2016-1-6 01:06
加油!感谢分享!
作者: qxz394731688    时间: 2016-1-12 13:19
好详细,顶顶顶
作者: 猜不得先生    时间: 2016-1-13 08:42
66666666666666666666
作者: 猜不得先生    时间: 2016-1-13 08:44
666666666666666666
作者: 胡思乱想的猫    时间: 2016-1-16 23:16
不错  真心可以   大赞一下啦 !!!
作者: szl77777    时间: 2016-1-17 00:27
只有深入理解,才能慢慢进步
作者: number0kaidi    时间: 2016-1-17 03:52
威武霸气,青春要拼过去.
作者: 夕兮兮    时间: 2016-1-18 20:44
谢谢~分享!
作者: 贫僧    时间: 2016-1-22 20:25
好厉害啊!!!!!!!!!!!!!!!!1
作者: 冷色    时间: 2016-1-23 23:02
加油,加油。
作者: xiaoxiao2015    时间: 2016-1-24 01:11

作者: 越狱犯    时间: 2016-1-24 17:55
好厉害的帖子
作者: Hi大智    时间: 2016-1-26 21:26
下次可以整理一下,好长,看了好久好久
作者: zxw1133    时间: 2016-1-26 23:32
顶起来!!
作者: 四夕    时间: 2016-1-31 19:41
学习了....
作者: 星空仰望heaven    时间: 2016-2-2 19:36
不错不错 加油
作者: zxydream    时间: 2016-2-3 22:37
学习了~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2