黑马程序员技术交流社区
标题: 【长沙校区】十年磨一剑【基哥笔记】Android基础—Day09 [打印本页]
作者: allen927 时间: 2015-12-12 15:56
标题: 【长沙校区】十年磨一剑【基哥笔记】Android基础—Day09
本帖最后由 allen927 于 2015-12-12 16:00 编辑
同样的课程、老师、就业,更好的学习环境,更低的学习成本!
android基础Day09(多媒体)
•(了解)计算机图形表示原理图片:宽 高
图片是由每个像素点来组成 像素点:小方块
图片的大小:宽*高*每个像素点的大小
•(掌握)从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的模拟器上进行演示
•(掌握)音乐播放器APIMediaPlayer
•(了解)音乐播放器方法调用时序图
•(掌握)视频播放器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;
}
}
•(掌握)surfaceviewSurfaceView:他是一个控件
作用:用来显示动态的画面 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 记录条目的位置
下载资源
作者: 邓娇林 时间: 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 |