加依赖 compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.1' compile 'com.squareup.retrofit2:converter-gson:2.0.1' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1' compile 'com.google.code.gson:gson:2.8.1' compile 'com.hjm:BottomTabBar:1.1.1' compile 'com.facebook.fresco:fresco:1.5.0' compile 'com.xhb:xbanner:1.3.0' compile 'com.nineoldandroids:library:2.4.0' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'jp.wasabeef:glide-transformations:1.0.6' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile(name: 'ijkplayer-java-release', ext: 'aar') compile 'org.greenrobot:greendao:3.2.0' compile 'org.greenrobot:eventbus:3.0.0'
public class Api { public static final String URL="http://result.eolinker.com/"; }
public interface ApiServer { @GET("iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=vedio") Observable<News> getData(); }
//这个可能用不到 public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); initImageLoder(); } /** * 图片加载 */ private void initImageLoder() { DisplayImageOptions options = new DisplayImageOptions.Builder() //.displayer(new RoundedBitmapDisplayer(360))//圆角问题:必须在xml里面指定具体大小 //设置下载的图片是否缓存在SD卡中 .cacheOnDisk(true) //设置下载的图片是否缓存在内存中 .cacheInMemory(true) //设置图片的解码类型 .bitmapConfig(Bitmap.Config.ARGB_8888) //设置图片Uri为空或是错误的时候显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) //设置图片加载/解码过程中错误时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) //设置图片在下载期间显示的图片 .showImageOnLoading(R.mipmap.ic_launcher) //图像将被二次采样的整数倍 .imageScaleType(ImageScaleType.IN_SAMPLE_INT) //设置图片加入缓存前,对bitmap进行设置 // .preProcessor(BitmapProcessor preProcessor) //设置图片在下载前是否重置,复位 .resetViewBeforeLoading(true) //是否设置为圆角,弧度是多少 .displayer(new RoundedBitmapDisplayer(20)) //是否图片加载好后渐入的动画时间 .displayer(new FadeInBitmapDisplayer(100)) //构建完成 .build(); ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) .defaultDisplayImageOptions(options) .build(); ImageLoader.getInstance().init(configuration); } }
GreenDao 3.1使用方式:
第一步 先在 项目的Project 的 buil.gradle 里 在buildscript- repositories添加配置mavenCentral(),
在dependencies 里添加 classpath'org.greenrobot:greendao-gradle-plugin:3.1.0'
buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' } }作者:啊发是也 链接:http://www.jianshu.com/p/853401a7d02b 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' } }作者:啊发是也 链接:http://www.jianshu.com/p/853401a7d02b 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' } }作者:啊发是也 链接:http://www.jianshu.com/p/853401a7d02b 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }第二步 在自己想要用的
GreenDao Module 里的 dependencies 里添加
compile'org.greenrobot:greendao:3.1.0'
compile'org.greenrobot:greendao-generator:3.1.0'
android 里 添加
greendao{
schemaVersion 1
daoPackage'com.afa.tourism.greendao.gen'
targetGenDir'src/main/java'
}
头部 添加schemaVersion: 数据库schema版本,也可以理解为数据库版本号 daoPackage:设置DaoMaster、DaoSession、Dao包名 targetGenDir:设置DaoMaster、DaoSession、Dao目录 targetGenDirTest:设置生成单元测试目录 generateTests:设置自动生成单元测试用例
apply plugin:'org.greenrobot.greendao'
第三步 创建新的实体类
在实体类 上方 写 上 @Entity 即可!然后导包而且不需要写set get 方法。 他自动帮我们生成.. 是不是很牛逼哦?
/** * Created by AFa on 2016/8/23. * /@Entity public class User { @Id(autoincrement = true) private Long id; private String name; private String age; private String sex; private String salary; }作者:啊发是也 链接:http://www.jianshu.com/p/853401a7d02b 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
@Entity public class User { @Id private Long id; private Integer thread_id; private Integer start_pos; private Integer end_pos; private Integer compelete_size; private String url; }
运行一下的User
@Entity public class User { @Id private Long id; @Property private String name; @Property private int age; @Generated(hash = 1309193360) public User(Long id, String name, int age) { this.id = id; this.name = name; this.age = age; } @Generated(hash = 586692638) public User() { } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } //下面省去了 setter/getter }
public interface Iview { // public static final String URL_BU="http://result.eolinker.com/"; // iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=vedio void showSuccess(List<News.DataBean> list); void showError(String s); }
public interface Imodel { void RequestSuccess(String url,OnselectLick onselectLick); }
public interface OnselectLick { void dataSuccess(List<News.DataBean> list); void dataErrror(String s); }
public class model implements Imodel { @Override public void RequestSuccess(String url, final OnselectLick onselectLick) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ApiServer apiServer = retrofit.create(ApiServer.class); Observable<News> data = apiServer.getData(); data.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) // .subscribe(new Subscriber<BannerBean>() { .subscribe(new Subscriber<News>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(News news) { List<News.DataBean> data1 = news.getData(); onselectLick.dataSuccess(data1); } }); } }
public class presenter { Imodel imodel; Iview iview; public presenter(Iview iview) { this.iview = iview; imodel = new model(); } public void getOk(String url) { imodel.RequestSuccess(url, new OnselectLick() { @Override public void dataSuccess(List<News.DataBean> list) { iview.showSuccess(list); } @Override public void dataErrror(String s) { } }); } }
public class MyString { String string; public MyString(String string) { this.string = string; } public String getString() { return string; } public void setString(String string) { this.string = string; } }
public class App extends Application { public static UserDao userDao; @Override public void onCreate() { super.onCreate(); DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "lenvess.db", null); DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb()); DaoSession daoSession = daoMaster.newSession(); userDao = daoSession.getUserDao(); } }
public class DownlaodSqlTool { /** * 创建下载的具体信息 */ public void insertInfos(List<DownloadInfo> infos) { for (DownloadInfo info : infos) { User user = new User(null, info.getThreadId(), info.getStartPos(), info.getEndPos(), info.getCompeleteSize(), info.getUrl()); userDao.insert(user); } } /** * 得到下载具体信息 */ public List<DownloadInfo> getInfos(String urlstr) { List<DownloadInfo> list = new ArrayList<DownloadInfo>(); List<User> list1 = userDao.queryBuilder().where(UserDao.Properties.Url.eq(urlstr)).build().list(); for (User user : list1) { DownloadInfo infoss = new DownloadInfo( user.getThread_id(), user.getStart_pos(), user.getEnd_pos(), user.getCompelete_size(), user.getUrl()); Log.d("main-----", infoss.toString()); list.add(infoss); } return list; } /** * 更新数据库中的下载信息 */ public void updataInfos(int threadId, int compeleteSize, String urlstr) { User user = userDao.queryBuilder() .where(UserDao.Properties.Thread_id.eq(threadId), UserDao.Properties.Url.eq(urlstr)).build().unique(); user.setCompelete_size(compeleteSize); userDao.update(user); } /** * 下载完成后删除数据库中的数据 */ public void delete(String url) { userDao.deleteAll(); } }
public class DownloadHttpTool { /** * 利用Http协议进行多线程下载具体实践类 */ private static final String TAG = DownloadHttpTool.class.getSimpleName(); private int threadCount;//线程数量 private String urlstr;//URL地址 private Context mContext; private Handler mHandler; private List<DownloadInfo> downloadInfos;//保存下载信息的类 private String localPath;//目录 private String fileName;//文件名 private int fileSize; private DownlaodSqlTool sqlTool;//文件信息保存的数据库操作类 private enum Download_State { Downloading, Pause, Ready;//利用枚举表示下载的三种状态 } private Download_State state = Download_State.Ready;//当前下载状态 private int globalCompelete = 0;//所有线程下载的总数 public DownloadHttpTool(int threadCount, String urlString, String localPath, String fileName, Context context, Handler handler) { super(); this.threadCount = threadCount; this.urlstr = urlString; this.localPath = localPath; this.mContext = context; this.mHandler = handler; this.fileName = fileName; sqlTool = new DownlaodSqlTool(); } //在开始下载之前需要调用ready方法进行配置 public void ready() { Log.w(TAG, "ready"); globalCompelete = 0; downloadInfos = sqlTool.getInfos(urlstr); if (downloadInfos.size() == 0) { initFirst(); } else { File file = new File(localPath + "/" + fileName); if (!file.exists()) { sqlTool.delete(urlstr); initFirst(); } else { fileSize = downloadInfos.get(downloadInfos.size() - 1) .getEndPos(); for (DownloadInfo info : downloadInfos) { globalCompelete += info.getCompeleteSize(); } Log.w(TAG, "globalCompelete:::" + globalCompelete); } } } public void start() { Log.w(TAG, "start"); if (downloadInfos != null) { if (state == Download_State.Downloading) { return; } state = Download_State.Downloading; for (DownloadInfo info : downloadInfos) { Log.v(TAG, "startThread"); new DownloadThread(info.getThreadId(), info.getStartPos(), info.getEndPos(), info.getCompeleteSize(), info.getUrl()).start(); } } } public void pause() { state = Download_State.Pause; } public void delete() { compelete(); File file = new File(localPath + "/" + fileName); file.delete(); } public void compelete() { sqlTool.delete(urlstr); } public int getFileSize() { return fileSize; } public int getCompeleteSize() { return globalCompelete; } //第一次下载初始化 private void initFirst() { Log.w(TAG, "initFirst"); try { URL url = new URL(urlstr); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("GET"); fileSize = connection.getContentLength(); Log.w(TAG, "fileSize::" + fileSize); File fileParent = new File(localPath); if (!fileParent.exists()) { fileParent.mkdir(); } File file = new File(fileParent, fileName); if (!file.exists()) { file.createNewFile(); } // 本地访问文件 RandomAccessFile accessFile = new RandomAccessFile(file, "rwd"); accessFile.setLength(fileSize); accessFile.close(); connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } int range = fileSize / threadCount; downloadInfos = new ArrayList<DownloadInfo>(); for (int i = 0; i < threadCount - 1; i++) { DownloadInfo info = new DownloadInfo(i, i * range, (i + 1) * range - 1, 0, urlstr); downloadInfos.add(info); } DownloadInfo info = new DownloadInfo(threadCount - 1, (threadCount - 1) * range, fileSize - 1, 0, urlstr); downloadInfos.add(info); sqlTool.insertInfos(downloadInfos); } //自定义下载线程 private class DownloadThread extends Thread { private int threadId; private int startPos; private int endPos; private int compeleteSize; private String urlstr; private int totalThreadSize; public DownloadThread(int threadId, int startPos, int endPos, int compeleteSize, String urlstr) { this.threadId = threadId; this.startPos = startPos; this.endPos = endPos; totalThreadSize = endPos - startPos + 1; this.urlstr = urlstr; this.compeleteSize = compeleteSize; } @Override public void run() { HttpURLConnection connection = null; RandomAccessFile randomAccessFile = null; InputStream is = null; try { randomAccessFile = new RandomAccessFile(localPath + "/" + fileName, "rwd"); randomAccessFile.seek(startPos + compeleteSize); URL url = new URL(urlstr); connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("GET"); connection.setRequestProperty("Range", "bytes=" + (startPos + compeleteSize) + "-" + endPos); is = connection.getInputStream(); byte[] buffer = new byte[1024]; int length = -1; while ((length = is.read(buffer)) != -1) { randomAccessFile.write(buffer, 0, length); compeleteSize += length; Message message = Message.obtain(); message.what = threadId; message.obj = urlstr; message.arg1 = length; mHandler.sendMessage(message); sqlTool.updataInfos(threadId, compeleteSize, urlstr); Log.w(TAG, "Threadid::" + threadId + " compelete::" + compeleteSize + " total::" + totalThreadSize); if (compeleteSize >= totalThreadSize) { break; } if (state != Download_State.Downloading) { break; } } } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); } randomAccessFile.close(); connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } } }
public class DownloadInfo { /** * 保存每个下载线程下载信息类 * */ private int threadId;// 下载器id private int startPos;// 开始点 private int endPos;// 结束点 private int compeleteSize;// 完成度 private String url;// 下载文件的URL地址 public DownloadInfo(int threadId, int startPos, int endPos, int compeleteSize, String url) { this.threadId = threadId; this.startPos = startPos; this.endPos = endPos; this.compeleteSize = compeleteSize; this.url = url; } public DownloadInfo() { } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getThreadId() { return threadId; } public void setThreadId(int threadId) { this.threadId = threadId; } public int getStartPos() { return startPos; } public void setStartPos(int startPos) { this.startPos = startPos; } public int getEndPos() { return endPos; } public void setEndPos(int endPos) { this.endPos = endPos; } public int getCompeleteSize() { return compeleteSize; } public void setCompeleteSize(int compeleteSize) { this.compeleteSize = compeleteSize; } @Override public String toString() { return "DownloadInfo [threadId=" + threadId + ", startPos=" + startPos + ", endPos=" + endPos + ", compeleteSize=" + compeleteSize + "]"; } }
public class DownloadUtil { private DownloadHttpTool mDownloadHttpTool; private OnDownloadListener onDownloadListener; private int fileSize; private int downloadedSize = 0; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); int length = msg.arg1; synchronized (this) {//加锁保证已下载的正确性 downloadedSize += length; } if (onDownloadListener != null) { onDownloadListener.downloadProgress(downloadedSize); } if (downloadedSize >= fileSize) { mDownloadHttpTool.compelete(); if (onDownloadListener != null) { onDownloadListener.downloadEnd(); } } } }; public DownloadUtil(int threadCount, String filePath, String filename, String urlString, Context context) { mDownloadHttpTool = new DownloadHttpTool(threadCount, urlString, filePath, filename, context, mHandler); } //下载之前首先异步线程调用ready方法获得文件大小信息,之后调用开始方法 public void start() { new AsyncTask<Void,Void,Void>() { @Override protected Void doInBackground(Void... arg0) { // TODO Auto-generated method stub mDownloadHttpTool.ready(); return null; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); fileSize = mDownloadHttpTool.getFileSize(); downloadedSize = mDownloadHttpTool.getCompeleteSize(); Log.w("Tag", "downloadedSize::" + downloadedSize); if (onDownloadListener != null) { onDownloadListener.downloadStart(fileSize); } mDownloadHttpTool.start(); } }.execute(); } public void pause() { mDownloadHttpTool.pause(); } public void delete(){ mDownloadHttpTool.delete(); } public void reset(){ mDownloadHttpTool.delete(); start(); } public void setOnDownloadListener(OnDownloadListener onDownloadListener) { this.onDownloadListener = onDownloadListener; } //下载回调接口 public interface OnDownloadListener { public void downloadStart(int fileSize); public void downloadProgress(int downloadedSize);//记录当前所有线程下总和 public void downloadEnd(); } }
public class MyAdapter extends RecyclerView.Adapter { List<News.DataBean> list; private MyViewHolder myViewHolder; private OnClickLisener onClickLisener; private ImageLoader imageLoader; Context context; private final DisplayImageOptions options; public OnClickLisener getOnClickLisener() { return onClickLisener; } public void setOnClickLisener(OnClickLisener onClickLisener) { this.onClickLisener = onClickLisener; } public interface OnClickLisener { void OnDainji(View v, int position); void OnLong(View v, int position); } public MyAdapter(Context context,List<News.DataBean> list) { this.list = list; this.context = context; imageLoader = ImageLoader.getInstance(); File file = new File(Environment.getExternalStorageDirectory(), "Bwei"); if (!file.exists()) file.mkdirs(); ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context) .diskCache(new UnlimitedDiskCache(file)) .build(); imageLoader.init(configuration); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) .cacheOnDisk(true) .build(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); return new MyViewHolder(inflate); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { myViewHolder = (MyViewHolder) holder; myViewHolder.textView.setText(list.get(position).getContent()); // ImageLoader.getInstance().displayImage(list.get(position).getImage_url(), myViewHolder.imageView); getimage(list.get(position).getImage_url(), myViewHolder.imageView); myViewHolder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onClickLisener.OnDainji(view, position); } }); myViewHolder.textView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { onClickLisener.OnLong(view, position); return true; } }); myViewHolder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onClickLisener.OnDainji(view, position); } }); myViewHolder.imageView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { onClickLisener.OnLong(view, position); return true; } }); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private final TextView textView; private final ImageView imageView; public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.text); imageView = itemView.findViewById(R.id.image); } } public void getimage(String path, ImageView imageView) { DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheOnDisk(true) .cacheInMemory(true) .build(); ImageLoader.getInstance().displayImage(path, imageView, options); } }
public class MainActivity extends AppCompatActivity implements Iview { private RecyclerView recyclerView; private text.bwei.com.yuekao08lianxi.presenter.presenter presenter; private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); presenter = new presenter(this); presenter.getOk(Api.URL); recyclerView = (RecyclerView) findViewById(R.id.recycler); } @Override public void showSuccess(final List<News.DataBean> list) { recyclerView.setLayoutManager(new LinearLayoutManager(this)); myAdapter = new MyAdapter(this,list); recyclerView.setAdapter(myAdapter); myAdapter.setOnClickLisener(new MyAdapter.OnClickLisener() { @Override public void OnDainji(View v, int position) { EventBus.getDefault().postSticky(new MyString(list.get(position).getVedio_url())); Intent intent = new Intent(MainActivity.this, VideoActivity.class); // intent.putExtra("url", list.get(position).getVedio_url()); startActivity(intent); } @Override public void OnLong(View v, int position) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("mm",list.get(position).getVedio_url()); startActivity(intent); } }); } @Override public void showError(String s) { } }
public class SecondActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private ProgressBar mProgressBar; private Button start; private Button pause; private TextView total; private int max; private DownloadUtil mDownloadUtil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); total= (TextView) findViewById(R.id.textView); start= (Button) findViewById(R.id.start); pause= (Button) findViewById(R.id.delete); mProgressBar= (ProgressBar) findViewById(R.id.progressBar); Intent intent = getIntent(); String urlString = intent.getStringExtra("mm"); // String urlString = "http://2449.vod.myqcloud.com/2449_22ca37a6ea9011e5acaaf51d105342e3.f20.mp4"; String localPath = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/local"; mDownloadUtil = new DownloadUtil(2, localPath, "adc.mp4", urlString, this); mDownloadUtil.setOnDownloadListener(new DownloadUtil.OnDownloadListener() { @Override public void downloadStart(int fileSize) { // TODO Auto-generated method stub Log.w(TAG, "fileSize::" + fileSize); max = fileSize; mProgressBar.setMax(fileSize); } @Override public void downloadProgress(int downloadedSize) { // TODO Auto-generated method stub Log.w(TAG, "Compelete::" + downloadedSize); mProgressBar.setProgress(downloadedSize); total.setText((int) downloadedSize * 100 / max + "%"); } @Override public void downloadEnd() { // TODO Auto-generated method stub Log.w(TAG, "ENd"); } }); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub mDownloadUtil.start(); } }); pause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub mDownloadUtil.pause(); } }); } }
public class VideoActivity extends AppCompatActivity implements PlayerManager.PlayerStateListener{ private PlayerManager player; private String url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); EventBus.getDefault().register(this); } private void initPlayer() { //初始化播放器 player = new PlayerManager(this); player.setFullScreenOnly(true); player.setScaleType(PlayerManager.SCALETYPE_FILLPARENT); player.playInFullScreen(true); player.setPlayerStateListener(this); player.play(url); } @Override public boolean onTouchEvent(MotionEvent event) { if (player.gestureDetector.onTouchEvent(event)) return true; return super.onTouchEvent(event); } @Override public void onComplete() { } @Override public void onError() { } @Override public void onLoading() { } @Override public void onPlay() { } @Override protected void onStop() { super.onStop(); player.stop(); } @Subscribe(threadMode = ThreadMode.MAIN,sticky = true) public void F(MyString myString){ url = myString.getString(); if(url !=null){ initPlayer(); } } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } }
主页面布局
<android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
item布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal"> <ImageView android:id="@+id/image" android:layout_width="100dp" android:layout_height="100dp" /> <TextView android:id="@+id/text" android:layout_width="250dp" android:layout_height="100dp" android:layout_gravity="center" /> </LinearLayout> </LinearLayout>
second布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/activity_video" android:orientation="vertical"> <text.bwei.com.yuekao08lianxi.widget.media.IjkVideoView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/video_view" ></text.bwei.com.yuekao08lianxi.widget.media.IjkVideoView> </LinearLayout>
second_activity
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginLeft="23dp" android:layout_marginStart="23dp" android:layout_marginTop="18dp" android:text="TextView" /> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="7.5dp" android:layout_below="@+id/textView" android:layout_marginRight="8dp" android:max="100" android:progress="100" android:visibility="visible" /> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_toEndOf="@+id/textView" android:layout_toRightOf="@+id/textView" android:text="下载" /> <Button android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginLeft="48dp" android:layout_marginStart="48dp" android:layout_toEndOf="@+id/start" android:layout_toRightOf="@+id/start" android:text="暂停" /> </RelativeLayout>