1、项目搭建、本地视频列表展示

一、手机影音的主要功能

 视频: 上下一首 暂停播放、   手势改变音量和亮度、 快进、   快退、 全屏、 长按屏幕暂停或恢复播放、 双击屏幕全屏或者恢复、 显示系统电量、 显示系统时间
     音频: 上下一首、暂停播放、 歌词、播放模式、通知栏显示当前播放的音频、快进、  快退

二、主要知识点

    (1)抽取Activity、Fragment的基类
    (2)通过TextView、View、ViewPager实现TabLayout、谷歌市场中Tab的效果
    (3)NineOldAndroids实现点击字体缩放动画效果
     (4) ContentResolver内容解析者 获取SD卡的本地视频列表
         第一步:通过AsyncQueryHandler和ContentResolver获取Cursor类型的本地视频列表数据
	@Override
	public void initData() {
		// 指定要获取哪些列
		String[] projection = {Media._ID, Media.TITLE, Media.DURATION, Media.SIZE, Media.DATA};
//		Cursor cursor = getActivity().getContentResolver().query(Media.EXTERNAL_CONTENT_URI, projection , null, null, null);
		
		//异步查询帮助类避免卡死主线程
		AsyncQueryHandler asyncQueryHandler = new AsyncQueryHandler(getActivity().getContentResolver()) {
			@Override
			protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
//				Utils.printCursor(cursor);
				listView.setAdapter(new VideoListAdapter(getActivity(), cursor));
			}
		};
		int token = 0;			// 相当于Message.what(用于区分查询结果)
		Object cookie = null;	// 相当于Message.obj(用于传递参数)
		String selection = null;			// 选择条件
		String[] selectionArgs = null;		// 选择条件参数
		String orderBy = Media.TITLE + " asc";	// 排序(根据Title升序排列)
		asyncQueryHandler.startQuery(token, cookie, Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, orderBy);
	}
  第二步:创建Cursor类型的Adapter
package com.itheima.term61.mobile.player.adapter;
import com.itheima.term61.mobile.player.R;
import com.itheima.term61.mobile.player.bean.VideoItem;
import com.itheima.term61.mobile.player.util.Utils;
import android.content.Context;
import android.database.Cursor;
import android.text.format.Formatter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
public class VideoListAdapter extends CursorAdapter {
	public VideoListAdapter(Context context, Cursor c) {
		super(context, c);
	}
	@Override
	public View newView(Context context, Cursor cursor, ViewGroup parent) {
		// 创建一个View
		View view = View.inflate(context, R.layout.adapter_video_list, null);
		ViewHolder holder = new ViewHolder();
		holder.tv_title = (TextView) view.findViewById(R.id.tv_title);
		holder.tv_duration = (TextView) view.findViewById(R.id.tv_duration);
		holder.tv_size = (TextView) view.findViewById(R.id.tv_size);
		view.setTag(holder);
		return view;
	}
	@Override
	public void bindView(View view, Context context, Cursor cursor) {
		//绑定数据
		ViewHolder holder = (ViewHolder) view.getTag();
		VideoItem item = VideoItem.fromCursor(cursor);
		holder.tv_title.setText(item.getTitle());
		holder.tv_duration.setText(Utils.formatDuration(item.getDuration()));
		holder.tv_size.setText(Formatter.formatFileSize(context, item.getSize()));
	}
	
	class ViewHolder {
		/** 视频名称 */
		TextView tv_title;
		/** 视频总时长 */
		TextView tv_duration;
		/** 视频大小 */
		TextView tv_size;
	}
}
 第三步:创建Video的实体类,并将cursor类型转化成对象
package com.itheima.term61.mobile.player.bean;
import java.io.Serializable;
import android.database.Cursor;
import android.provider.MediaStore.Video.Media;
public class VideoItem implements Serializable {
	
	private String title;
	private String data;
	private long duration;
	private long size;
	
	public static VideoItem fromCursor(Cursor cursor) {
		VideoItem item = new VideoItem();
		item.setTitle(cursor.getString(cursor.getColumnIndex(Media.TITLE)));
		item.setData(cursor.getString(cursor.getColumnIndex(Media.DATA)));
		item.setDuration(cursor.getLong(cursor.getColumnIndex(Media.DURATION)));
		item.setSize(cursor.getLong(cursor.getColumnIndex(Media.SIZE)));
		return item;
	}
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getData() {
		return data;
	}
	public void setData(String data) {
		this.data = data;
	}
	public long getDuration() {
		return duration;
	}
	public void setDuration(long duration) {
		this.duration = duration;
	}
	public long getSize() {
		return size;
	}
	public void setSize(long size) {
		this.size = size;
	}
}

(5)格式化时间大小

import java.text.SimpleDateFormat;
import java.util.Calendar;
public static CharSequence formatDuration(long duration) {
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.add(Calendar.MILLISECOND, (int) duration);
		long hourMillis = 1000 * 60 * 60;	// 一小时对应的毫秒数
		String pattern = (duration / hourMillis > 0) ? "HH:mm:ss" : "mm:ss";
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		return format.format(calendar.getTime());
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值