android第四次作业

 

一、团队成员

李钊  1600802047 162 https://www.cnblogs.com/18LZblog/

二、apk链接

 https://pan.baidu.com/s/1foSVwC8cirUeDVdWme4CRQ

三、coding链接

https://git.coding.net/LZ18009788462/android_final.git

四、项目介绍

4.1总体效果截图

 

     

 

 

    

 

 

    

 

 

4.2录屏演示

 

 

4.2.1内置视频链接

 https://pan.baidu.com/s/1pzOFSHrC68p1MI_JVdqFQg

4.3实现的功能及其效果描述

首先用fragment弄了5的page,可以支持五个页面左右滑动查看。

第一页即首页,顶部使用轮播图展示了一些球员的照片,下面紧接着的是当下的时事新闻,点击相应的新闻可以查看具体内容。

第二页展示了最新的球员世界排名

第三页是部分球员的详细介绍

第四页列出了2019年乒乓球的赛事赛程

第五页是精彩集锦,点击可以查看相关的视频。

五、关键代码

1、实现左右页面滑屏的函数

    public void onPageScrollStateChanged(int state) {
        //state的状态有三个,0表示什么都没做,1正在滑动,2滑动完毕
        if (state == 2) {
            switch (vpager.getCurrentItem()) {
                case PAGE_ONE:
                    first_page.setChecked(true);
                    break;
                case PAGE_TWO:
                    ranking.setChecked(true);
                    break;
                case PAGE_THREE:
                    players_data.setChecked(true);
                    break;
                case PAGE_FOUR:
                    schedule.setChecked(true);
                    break;
                case PAGE_FIVE:
                    highlights.setChecked(true);
                    break;
            }
        }
    }

2、fragment适配器,在mainactivity中使用

package com.example.hp.android_final;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    private final int PAGER_COUNT = 5;
    private MyFragment myFragment1 = null;
    private MyFragment2 myFragment2 = null;
    private MyFragment3 myFragment3 = null;
    private MyFragment4 myFragment4 = null;
    private MyFragment5 myFragment5 = null;


    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
        myFragment1 = new MyFragment();
        myFragment2 = new MyFragment2();
        myFragment3 = new MyFragment3();
        myFragment4 = new MyFragment4();
        myFragment5 = new MyFragment5();
    }


    @Override
    public int getCount() {
        return PAGER_COUNT;
    }

    @Override
    public Object instantiateItem(ViewGroup vg, int position) {
        return super.instantiateItem(vg, position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        System.out.println("position Destory" + position);
        super.destroyItem(container, position, object);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;
        switch (position) {
            case MainActivity.PAGE_ONE:
                fragment = myFragment1;
                break;
            case MainActivity.PAGE_TWO:
                fragment = myFragment2;
                break;
            case MainActivity.PAGE_THREE:
                fragment = myFragment3;
                break;
            case MainActivity.PAGE_FOUR:
                fragment = myFragment4;
                break;
            case MainActivity.PAGE_FIVE:
                fragment = myFragment5;
                break;
        }
        return fragment;
    }

}

3、用viewflipper进行图片的轮播

 private ViewFlipper vflp_help;
        vflp_help = (ViewFlipper) view.findViewById(R.id.vflp);
        vflp_help.setFlipInterval(3000);
        vflp_help.startFlipping();

4、listview适配器

package com.example.hp.android_final;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;
import java.util.Map;

public class NewsAdapter extends BaseAdapter {
private List<Map<String , Object>> data ;
private LayoutInflater layoutInflater ;
private Context context ;
public NewsAdapter(Context context , List<Map<String , Object>> data ){
    this.context = context ;
    this.data = data ;
    this.layoutInflater = LayoutInflater.from(context);
}

public final class News{
    public ImageView image ;
    public TextView title ;
    public TextView content ;
}
public int getCount(){
    return data.size();
}
public Object getItem(int position){
        return data.get(position);
    }
    public long getItemId(int position){
        return position ;
    }
    public View getView(int position , View convertView , ViewGroup parent){
    News ns = null;
    if (convertView == null) {
        ns = new News();
        convertView = layoutInflater.inflate(R.layout.news_item ,null);
        ns.image = (ImageView)convertView.findViewById(R.id.image);
        ns.title = (TextView)convertView.findViewById(R.id.title);
        ns.content = (TextView)convertView.findViewById(R.id.content);
        convertView.setTag(ns);
    }else{
        ns = (News)convertView.getTag();
        }
        ns.image.setBackgroundResource((Integer)data.get(position).get("image"));
        ns.title.setText((String)data.get(position).get("title"));
        ns.content.setText((String)data.get(position).get("content"));
    return convertView ;
    }
 }

5、listview点击响应

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Intent intent = null ;
                        switch(position){
                            case 0 :
                                intent = new Intent(parent.getContext(),Main2Activity.class);
                                break;
                            case 1 :
                                intent = new Intent(parent.getContext(),Main7Activity.class);
                                break;
                            case 2 :
                                intent = new Intent(parent.getContext(),Main8Activity.class);
                                break;
                        }
                        startActivity(intent);
                }
        });
        return view;
    }

6、视频播放——activity

package com.example.hp.android_final;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

public class Main3Activity extends AppCompatActivity implements View.OnClickListener {
    private VideoView videoView;
    private Button btn_start;
    private Button btn_pause;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        bindViews();
        if (ContextCompat.checkSelfPermission(Main3Activity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(Main3Activity.this, new String[]{
                    Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }
    }
    private void bindViews() {
        videoView = (VideoView) findViewById(R.id.videoView);
        btn_start = (Button) findViewById(R.id.btn_start);
        btn_pause = (Button) findViewById(R.id.btn_pause);


        btn_start.setOnClickListener(this);
        btn_pause.setOnClickListener(this);


        //根据文件路径播放
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            videoView.setVideoPath(Environment.getExternalStorageDirectory() + "/vedio_a.mp4");
        }

        //读取放在raw目录下的文件
        //videoView.setVideoURI(Uri.parse("android.resource://com.jay.videoviewdemo/" + R.raw.lesson));
        videoView.setMediaController(new MediaController(this));
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_start:
                videoView.start();
                break;
            case R.id.btn_pause:
                videoView.pause();
                break;

    }
    }
}

 六、运行其他团队项目的apk,团队讨论,选出你心目中的前5名,并简单说明一下。

1、盖星辰组

该组做个了一个非常有趣的小游戏,随着生活压力的增大,该小游戏很好的满足了人们的需求,消遣了人们的无聊时光。

优点:首先点击进去,首页非常光鲜亮丽,给人以视觉上的冲击。也很符合一个小游戏的基本页面。点击开始,音乐的出现给游戏带来的一点跃动感。设置功能很好的满足了不同人群的需求,设置了不同难度关卡和不同的任务选择。总体来说还不错,界面布局十分美观。

缺点:在进行操作的时候有些困难,有时候人物不听使唤,左右控制不是很灵敏,导致玩高难度关卡的时候出现问题。

如果我来做的话可能会针对以上缺点对用户的操作进行修正,是用户上手体验更好。

2、孟凡锚组

该小组做了一个简易的音乐播放器,可以获取手机内置的音乐进行播放,并实现了暂停,上一首,下一首的功能。

优点:首页进去,插入了一个MV,很有新意,背景也很有视觉效应。进去以后,最上面是一个图片轮播器,展示了一些专辑的封面,有QQ音乐网易云音乐等APP的风格。点击歌曲播放的时候用粉红色标明,一目了然,让用户清楚的知道自己当前播放的音乐。

缺点:可能页面布局稍稍有一些欠缺(不同人有不同的审美吧!),还有就是在我的手机上运行的时候,无法显示下方的进度条以及上一首下一按钮,体验有一点差。

如果我来做的话,主要还是对页面布局进行优化,然后在针对不同机型的显示进行优化,以满足大部分以致所有安卓用户。

3、汤文涛组

该组做了一个校园二手交易的APP,满足了当代大学生的一些需求,给大学生们提供了一个很好的平台。

优点:登录注册界面满足了一个APP的基本需求,连接了数据库。进入界面以后便一目了然的可以查看到不同想要的交易的信息,上面还可以选择不同的商品类型,很好的满足了用需求。交易商品的下方可以进行评论留言,有很好的互动以及对商品的充分了解。个人中心弄的也很好,可以查看自己发布的内容以及更改密码等。总体还不错。

缺点:页面可以更加美观,其中的电子产品等都还没有实现,可以将这些数据全部写入数据库,方便操作和后期的管理。

如果我来做,可能将页面优化,利用Fragment和Viewpager来布局,让页面更加灵活而不是单纯的跳转。让后连接数据库对商品详情进行管理。

4、苏醒组

该组做了一个简易的音乐播放器,实现了音乐的播放功能,上一首下一首还有音量调节。

优点:直接获取到了用户手机内置的音乐。实现了音量的调节,想的很全面。

缺点:页面布局有些简略,感觉没有音乐APP的优美感。

针对他的问题,我认为可能最重要的还是对界面美观进行优化,对listview列表采取跳转的方式,进入到播放页面,然后利用图片的旋转,下方布置进度条,及存放组件。这样可能用户的体验感会更好。

5、石俊浩组

该组做了一个简易的音乐播放器,实现了音乐播放的功能,上一首下一首。

优点:进入APP时有一个进入动画,很新颖。然后音乐播放的时候有图片轮转,画面比较美观。

缺点:只能获取开发者(他自己)手机里面的音乐,而无法获取用户手机里面的音乐。没有进度条,用户无法清楚的知道当前音乐播放的位置。

针对以上的缺点,我认为可以借鉴一下其他组的优点,直接获取用户手机里面的音乐,然后再实现一个进度条的功能可能就比较完善了。

 

七、实现过程中遇到的问题及解决方法。

1、使用viewflipper进行图片轮播的时候无动画效果。

解决方法:在网上查阅后,新加了两个xml文件来实现动画。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="2000"
        android:fromXDelta="100%p"
        android:toXDelta="0" />

</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

</set>

2、使用listview的时候定义List<ArrayList>(),数据无法现实,即运行的时候没有显示列表信息。

解决方法:换了另外一个List。使用了List<Map<String , Object>>,用map来存放相关的信息。

3、视频播放的时候系统总是提示”很抱歉无法播放该视频“。

解决方法:在安卓6.0以上是要赋予权限的,出现以上问题是由于没有赋予权限。

       if (ContextCompat.checkSelfPermission(Main3Activity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(Main3Activity.this, new String[]{
                    Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        }

然后在manifest中在赋予权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

八、分工

 

姓名 分工 工作比例 分数
李钊 所有 100% 10

 


 

posted @ 2019-01-01 17:38  Lzblog  阅读(289)  评论(0编辑  收藏  举报