android第四次做業

 

1、團隊成員java

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

2、apk連接git

 https://pan.baidu.com/s/1foSVwC8cirUeDVdWme4CRQ數據庫

3、coding連接app

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

4、項目介紹ide

4.1整體效果截圖函數

 

     

 

 

    

 

 

    

 

 

4.2錄屏演示佈局

 

 

4.2.1內置視頻連接優化

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

4.3實現的功能及其效果描述

首先用fragment弄了5的page,能夠支持五個頁面左右滑動查看。

第一頁即首頁,頂部使用輪播圖展現了一些球員的照片,下面緊接着的是當下的時事新聞,點擊相應的新聞能夠查看具體內容。

第二頁展現了最新的球員世界排名

第三頁是部分球員的詳細介紹

第四頁列出了2019年乒乓球的賽事賽程

第五頁是精彩集錦,點擊能夠查看相關的視頻。

5、關鍵代碼

一、實現左右頁面滑屏的函數

    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;
            }
        }
    }

二、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;
    }

}

三、用viewflipper進行圖片的輪播

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

四、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 ;
    }
 }

五、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;
    }

六、視頻播放——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;

    }
    }
}

 6、運行其餘團隊項目的apk,團隊討論,選出你心目中的前5名,並簡單說明一下。

一、蓋星辰組

該組作個了一個很是有趣的小遊戲,隨着生活壓力的增大,該小遊戲很好的知足了人們的需求,消遣了人們的無聊時光。

優勢:首先點擊進去,首頁很是光鮮亮麗,給人以視覺上的衝擊。也很符合一個小遊戲的基本頁面。點擊開始,音樂的出現給遊戲帶來的一點躍動感。設置功能很好的知足了不一樣人羣的需求,設置了不一樣難度關卡和不一樣的任務選擇。整體來講還不錯,界面佈局十分美觀。

缺點:在進行操做的時候有些困難,有時候人物不聽使喚,左右控制不是很靈敏,致使玩高難度關卡的時候出現問題。

若是我來作的話可能會針對以上缺點對用戶的操做進行修正,是用戶上手體驗更好。

二、孟凡錨組

該小組作了一個簡易的音樂播放器,能夠獲取手機內置的音樂進行播放,並實現了暫停,上一首,下一首的功能。

優勢:首頁進去,插入了一個MV,頗有新意,背景也頗有視覺效應。進去之後,最上面是一個圖片輪播器,展現了一些專輯的封面,有QQ音樂網易雲音樂等APP的風格。點擊歌曲播放的時候用粉紅色標明,一目瞭然,讓用戶清楚的知道本身當前播放的音樂。

缺點:可能頁面佈局稍稍有一些欠缺(不一樣人有不一樣的審美吧!),還有就是在個人手機上運行的時候,沒法顯示下方的進度條以及上一首下一按鈕,體驗有一點差。

若是我來作的話,主要仍是對頁面佈局進行優化,而後在針對不一樣機型的顯示進行優化,以知足大部分以至全部安卓用戶。

三、湯文濤組

該組作了一個校園二手交易的APP,知足了當代大學生的一些需求,給大學生們提供了一個很好的平臺。

優勢:登陸註冊界面知足了一個APP的基本需求,鏈接了數據庫。進入界面之後便一目瞭然的能夠查看到不一樣想要的交易的信息,上面還能夠選擇不一樣的商品類型,很好的知足了用需求。交易商品的下方能夠進行評論留言,有很好的互動以及對商品的充分了解。我的中心弄的也很好,能夠查看本身發佈的內容以及更改密碼等。整體還不錯。

缺點:頁面能夠更加美觀,其中的電子產品等都尚未實現,能夠將這些數據所有寫入數據庫,方便操做和後期的管理。

若是我來作,可能將頁面優化,利用Fragment和Viewpager來佈局,讓頁面更加靈活而不是單純的跳轉。讓後鏈接數據庫對商品詳情進行管理。

四、甦醒組

該組作了一個簡易的音樂播放器,實現了音樂的播放功能,上一首下一首還有音量調節。

優勢:直接獲取到了用戶手機內置的音樂。實現了音量的調節,想的很全面。

缺點:頁面佈局有些簡略,感受沒有音樂APP的優美感。

針對他的問題,我認爲可能最重要的仍是對界面美觀進行優化,對listview列表採起跳轉的方式,進入到播放頁面,而後利用圖片的旋轉,下方佈置進度條,及存放組件。這樣可能用戶的體驗感會更好。

五、石俊浩組

該組作了一個簡易的音樂播放器,實現了音樂播放的功能,上一首下一首。

優勢:進入APP時有一個進入動畫,很新穎。而後音樂播放的時候有圖片輪轉,畫面比較美觀。

缺點:只能獲取開發者(他本身)手機裏面的音樂,而沒法獲取用戶手機裏面的音樂。沒有進度條,用戶沒法清楚的知道當前音樂播放的位置。

針對以上的缺點,我認爲能夠借鑑一下其餘組的優勢,直接獲取用戶手機裏面的音樂,而後再實現一個進度條的功能可能就比較完善了。

 

7、實現過程當中遇到的問題及解決方法。

一、使用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>

二、使用listview的時候定義List<ArrayList>(),數據沒法現實,即運行的時候沒有顯示列表信息。

解決方法:換了另一個List。使用了List<Map<String , Object>>,用map來存放相關的信息。

三、視頻播放的時候系統老是提示」很抱歉沒法播放該視頻「。

解決方法:在安卓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" />

8、分工

 

姓名 分工 工做比例 分數
李釗 全部 100% 10
相關文章
相關標籤/搜索