diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..e065d56 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +AndroidTermWork \ No newline at end of file diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml index 70f212e..f0bf29e 100644 --- a/.idea/dbnavigator.xml +++ b/.idea/dbnavigator.xml @@ -2,9 +2,15 @@ - + + + + + + + diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 346f741..a2070a4 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 113ceb4..32050b8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -9,7 +9,7 @@ - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..e68508a 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index cbc0067..2c65296 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,6 +25,12 @@ android { } dependencies { + implementation 'androidx.cardview:cardview:1.0.0' + //noinspection GradleCompatible + implementation 'com.google.android.material:material:1.3.0' + implementation 'com.squareup.retrofit2:converter-gson:2.4.0' + implementation "com.squareup.retrofit2:retrofit:2.8.1" + implementation 'androidx.viewpager2:viewpager2:1.0.0' implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' @@ -33,15 +39,16 @@ dependencies { implementation 'androidx.navigation:navigation-fragment:2.3.5' implementation 'androidx.navigation:navigation-ui:2.3.5' implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' implementation 'com.android.volley:volley:1.1.1' - implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' //核心必须依赖 - implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //经典刷新头 - implementation 'com.scwang.smart:refresh-footer-classics:2.0.1' //经典加载 + implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' //核心必须依赖 + implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //经典刷新头 + implementation 'com.scwang.smart:refresh-footer-classics:2.0.1' //经典加载 implementation 'cn.jzvd:jiaozivideoplayer:7.7.0' implementation 'de.hdodenhof:circleimageview:3.1.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0dd3f0..47343f3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + @@ -9,11 +10,11 @@ android:allowBackup="true" android:icon="@mipmap/appicon" android:label="@string/app_name" + android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/iconcirred" android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning" - android:networkSecurityConfig="@xml/network_security_config" tools:targetApi="n"> + + + @@ -45,7 +55,7 @@ - + @@ -55,7 +65,7 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/example/androidtermwork/LoginPage.java b/app/src/main/java/com/example/androidtermwork/LoginPage.java index 77d3d12..41786a9 100644 --- a/app/src/main/java/com/example/androidtermwork/LoginPage.java +++ b/app/src/main/java/com/example/androidtermwork/LoginPage.java @@ -34,6 +34,8 @@ import android.widget.TextView; import android.widget.Toast; import com.example.androidtermwork.util.StatusBarUtil; +import com.example.androidtermwork.video.MainActivityVideo; + @RequiresApi(api = Build.VERSION_CODES.M) public class LoginPage extends AppCompatActivity { private AlertDialog.Builder builder; @@ -76,6 +78,8 @@ public class LoginPage extends AppCompatActivity { OnButtonToLogin(); //注册 OnButtonToRegister(); + //视频 + OnButtonToVideo(); //初始化页面底部可点击文本 initView(); //密码显示或隐藏 @@ -215,6 +219,17 @@ public class LoginPage extends AppCompatActivity { }); } + public void OnButtonToVideo() { + Button regis = findViewById(R.id.video); + regis.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginPage.this, MainActivityVideo.class); + startActivity(intent); + } + }); + } + //初始化页面底部可点击文本 public void initView() { diff --git a/app/src/main/java/com/example/androidtermwork/ui/dashboard/VideoArticlesFragment.java b/app/src/main/java/com/example/androidtermwork/ui/dashboard/VideoArticlesFragment.java new file mode 100644 index 0000000..ab1a8ad --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/ui/dashboard/VideoArticlesFragment.java @@ -0,0 +1,140 @@ +package com.example.androidtermwork.ui.dashboard; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.SimpleAdapter; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; + +import com.example.androidtermwork.R; +import com.example.androidtermwork.webView; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +class VideoNews { + public String title; + public String resource; + public String title2; + public String time; + public String article; + public String editor; + + public VideoNews(String title, String resource, String title2, String time, String article, String editor) { + this.title = title; + this.resource = resource; + this.title2 = title2; + this.time = time; + this.article = article; + this.editor = editor; + } +} + +public class VideoArticlesFragment extends Fragment { + public static List newLists = Arrays.asList( + new News("中国共产党第十九届中央委员会第六次全体会议公报", + "“学习强国”学习平台", + "中国共产党第十九届中央委员会第六次全体会议公报(2021年11月11日中国共产党第十九届中央委员会第六次全体会议通过)", + "2021-11-12", + "中国共产党第十九届中央委员会第六次全体会议,于2021年11月8日至11日在北京举行。\\n' +\n" + + " '出席这次全会的有,中央委员197人,候补中央委员151人。中央纪律检查委员会常务委员会委员和有关方面负责同志列席会议。\\n' +\n" + + " '全会由中央政治局主持。中央委员会总书记习近平作了重要讲话。\\n' +\n" + + " '全会听取和讨论了习近平受中央政治局委托作的工作报告,审议通过了《中共中央关于党的百年奋斗重大成就和历史经验的决议》,审议通过了《关于召开党的第二十次全国代表大会的决议》。习近平就《中共中央关于党的百年奋斗重大成就和历史经验的决议(讨论稿)》向全会作了说明。\\n' +\n" + + " '全会认为,总结党的百年奋斗重大成就和历史经验,是在建党百年历史条件下开启全面建设社会主义现代化国家新征程、在新时代坚持和发展中国特色社会主义的需要;是增强政治意识、大局意识、核心意识、看齐意识,坚定道路自信、理论自信、制度自信、文化自信,做到坚决维护习近平同志党中央的核心、全党的核心地位,坚决维护党中央权威和集中统一领导,确保全党步调一致向前进的需要;是推进党的自我革命、提高全党斗争本领和应对风险挑战能力、永葆党的生机活力、团结带领全国各族人民为实现中华民族伟大复兴的中国梦而继续奋斗的需要。全党要坚持唯物史观和正确党史观,从党的百年奋斗中看清楚过去我们为什么能够成功、弄明白未来我们怎样才能继续成功,从而更加坚定、更加自觉地践行初心使命,在新时代更好坚持和发展中国特色社会主义。", + "秦辰宇"), + new News("习近平主持召开中央政治局会议 分析研究2022年经济工作", "“学习强国”学习平台", + "征求对经济工作的意见和建议\n" + + "\n" + + "中共中央召开党外人士座谈会\n" + + "\n" + + "习近平主持并发表重要讲话\n" + + "\n" + + "李克强通报有关情况 汪洋王沪宁韩正出席", + "2021-12-06", + "新华社北京12月6日电 12月2日,中共中央在中南海召开党外人士座谈会,就今年经济形势和明年经济工作听取各民主党派中央、全国工商联负责人和无党派人士代表的意见和建议。中共中央总书记习近平主持座谈会并发表重要讲话强调,要全面贯彻落实中共十九届六中全会精神,重温多党合作的历程和作用,发扬光荣传统,坚守合作初心,围绕宏观政策要稳健有效、微观政策要激发市场主体活力、改革开放政策要增强发展动力、社会政策要兜住民生底线,积极履行职能,加强自身建设,引导广大成员和所联系群众把会议精神转化为共同奋斗的政治共识,在全面建设社会主义现代化国家新征程中继续团结奋斗。\n" + + "\n" + + "座谈会上,民革中央主席万鄂湘、民盟中央主席丁仲礼、民建中央主席郝明金、民进中央主席蔡达峰、农工党中央主席陈竺、致公党中央常务副主席蒋作君、九三学社中央主席武维华、台盟中央主席苏辉、全国工商联主席高云龙、无党派人士代表宇如聪先后发言。他们完全赞同中共中央对当前我国经济形势的分析判断和明年经济工作的谋划考虑,并就加强宏观调控、提升政策效能,改善进出口结构、促进内外贸一体化,提高生产制造装备水平、加快我国高端制造业发展,健全人口服务体系、激发内需增长潜力,完善我国疫情防控策略、为稳增长打牢扎实基础,强化法治保障和政策引领、科学有序推进“双碳”目标,转变涉企财税支持方式、提高财政收入质量,加强农村生态环境治理、夯实乡村振兴基础,加大改革力度、助力推进共同富裕,强化中小企业发展政策导向和可持续发展能力,发挥民企在促进共同富裕中积极作用,完善科技领域“揭榜挂帅”工作机制,加快推动省际交界地区协同发展等提出意见建议。", + "张秋兰"), + new News("习近平主持党外人士座谈会并发表重要讲话", "“学习强国”学习平台", + "", + "2021-12-06", + "", "张玙蕗"), + new News("国家主席习近平任免驻外大使", "“学习强国”学习平台", + "", + "2021-12-03", + "", "齐翼"), + new News("习近平向“2021从都国际论坛”开幕式发表视频致辞", + "“学习强国”学习平台", + "", + "2021-12-05", + "", "秦辰宇"), + new News("习近平同老挝人民革命党中央总书记、国家主席通伦共同出席中老铁路通车仪式", + "“学习强国”学习平台", + "", + "2021-12-03", + "", "胡佳"), + new News("习近平向中国-拉共体论坛第三届部长会议发表视频致辞", + "“学习强国”学习平台", + "", + "2021-12-03", + "", "齐翼"), + new News("习近平出席全国宗教工作会议并发表重要讲话", + "“学习强国”学习平台", + "", + "2021-12-04", + "", "秦辰宇")); + + private DashboardViewModel dashboardViewModel; + + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { +// dashboardViewModel = +// ViewModelProviders.of(this).get(DashboardViewModel.class); + View root = inflater.inflate(R.layout.fragment_dashboard, container, false); + final ListView listView = root.findViewById(R.id.newsList); +// dashboardViewModel.getText().observe(this, new Observer() { +// @Override +// public void onChanged(@Nullable String s) { +// } +// }); + updateListView(listView); + return root; + } + + public void updateListView(ListView listView) { + final List> listItem = new ArrayList<>(); + for (int i = 0; i < newLists.size(); i++) { + Map tempMap = new HashMap<>(); + tempMap.put("title", newLists.get(i).title); + tempMap.put("resource", newLists.get(i).resource + newLists.get(i).time); + listItem.add(tempMap); + } + SimpleAdapter mAdapter = new SimpleAdapter(getActivity(), listItem, R.layout.news_list_item, new String[]{"title", "resource"}, new int[]{R.id.title, R.id.resource}); + listView.setAdapter(mAdapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + //跳转页面,显示详细信息 + Intent intent = new Intent(getActivity(), webView.class); + Bundle bundle = new Bundle(); + bundle.putString("title", newLists.get(i).title); + bundle.putString("resource", newLists.get(i).resource); + bundle.putString("title2", newLists.get(i).title2); + bundle.putString("time", newLists.get(i).time); + bundle.putString("article", newLists.get(i).article); + bundle.putString("editor", newLists.get(i).editor); + intent.putExtras(bundle); + startActivity(intent); + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/androidtermwork/video/AddFragment.java b/app/src/main/java/com/example/androidtermwork/video/AddFragment.java new file mode 100644 index 0000000..75d3dfb --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/AddFragment.java @@ -0,0 +1,165 @@ +package com.example.androidtermwork.video; + +import static android.content.pm.PackageManager.PERMISSION_DENIED; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.FileProvider; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import com.example.androidtermwork.R; + +import java.io.File; +import java.util.Locale; + +public class AddFragment extends Fragment { + private View main_view; + private static String TAG = "XXL"; + private String[] permissionsArray = new String[]{ + Manifest.permission.CAMERA, //相机权限 + Manifest.permission.WRITE_EXTERNAL_STORAGE, //写外部文件 + Manifest.permission.READ_EXTERNAL_STORAGE, //读外部文件 + Manifest.permission.RECORD_AUDIO //音频录制 + }; + private int REQUEST_CODE = 277; + private int REQUEST_CAMERA = 305; + private File videoPath; + private Boolean permissionOK = false; + private LinearLayout camera; + private LinearLayout upload; + private TextView regis; + + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { +// main_view = inflater.inflate(R.layout.article, container, false); + main_view = inflater.inflate(R.layout.video_articles, container, false); + regis = main_view.findViewById(R.id.article_title_1); + +// OnButtonToVideo(); +// camera = main_view.findViewById(R.id.shoot_layout); +// upload = main_view.findViewById(R.id.local_layout); +// +// //1、第一件事获取或者验证用户本地文件读写权限和摄像头权限 +// if(!checkPermissionAllGranted(permissionsArray)){ +// requestPermissions(permissionsArray, REQUEST_CODE); +// }else{ +// permissionOK = true; +// } +// +// camera.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if(permissionOK) +// openSystemCamera(); +// else { +// Toast.makeText(getActivity(), "请您先授权",Toast.LENGTH_SHORT).show(); +// requestPermissions(permissionsArray, REQUEST_CODE); +// if(permissionOK) +// openSystemCamera(); +// } +// } +// }); +// upload.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Toast.makeText(getActivity(), "系统正在维护,敬请期待",Toast.LENGTH_SHORT).show(); +// } +// }); + + return main_view; + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + System.out.println("ddddd" + isAdded()); + + if (isAdded()) { + regis.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // + System.out.println("dddddddddddddddddddddddddddd"); + startActivity(new Intent(getActivity(), ArticleActivity.class)); + } + }); + } + } + + + // 设置点击事件监听器 + + public void OnButtonToVideo() { + +// regis.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +//// inflater.inflate(R.layout.video_articles, container, false); +// } +// }); + } + + + /* + 打开系统相机 + */ + private void openSystemCamera() { + Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); + String videoName = String.format(Locale.getDefault(), "video_%d.mp4", System.currentTimeMillis()); + videoPath = new File(getActivity().getExternalCacheDir(), videoName); + + Uri outUri = FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".fileprovider", videoPath); + cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outUri); + startActivityForResult(cameraIntent, REQUEST_CAMERA); //跳转相机拍摄activity + } + + private boolean checkPermissionAllGranted(String[] permissions) { + for (String permission : permissions) { + if (getActivity().checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { + // 只要有一个权限没有被授予, 则直接返回 false + return false; + } + } + return true; + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == REQUEST_CODE) { + Log.d(TAG, "权限申请回调"); + for (int i = 0; i < grantResults.length; i++) { + if (grantResults[i] == PERMISSION_DENIED) + return; + } + permissionOK = true; + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + Log.d(TAG, "拍摄完毕,返回AddFragment"); + } + +} diff --git a/app/src/main/java/com/example/androidtermwork/video/ArticleActivity.java b/app/src/main/java/com/example/androidtermwork/video/ArticleActivity.java new file mode 100644 index 0000000..7fbafbb --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/ArticleActivity.java @@ -0,0 +1,19 @@ +package com.example.androidtermwork.video; + +import android.os.Build; +import android.os.Bundle; + +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.androidtermwork.R; + +public class ArticleActivity extends AppCompatActivity { + + @RequiresApi(api = Build.VERSION_CODES.M) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.article); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/androidtermwork/video/MainActivityVideo.java b/app/src/main/java/com/example/androidtermwork/video/MainActivityVideo.java new file mode 100644 index 0000000..8e0f956 --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/MainActivityVideo.java @@ -0,0 +1,220 @@ +package com.example.androidtermwork.video; + +import android.app.Person; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import com.example.androidtermwork.LoginPage; +import com.example.androidtermwork.R; +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import java.util.ArrayList; +import java.util.List; + +/* + 主界面就是ViewPager2 + */ +public class MainActivityVideo extends AppCompatActivity { + + private ViewPager2 pager2; + private BottomNavigationView bottomNavigationView; + private List fragments; + private MyFragmentAdapter adapter; + + // private List videos; //消息列表 +// private String baseUrl = "https://beiyou.bytedance.com/"; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_video); + OnButtonToVideo(); + OnImageToVideo(); + + + bottomNavigationView = findViewById(R.id.bnv); + + //监听事件,底部按钮和pager同步 + bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.item_home: + pager2.setCurrentItem(0); + break; + case R.id.item_add: + pager2.setCurrentItem(1); + break; + case R.id.item_my: + pager2.setCurrentItem(2); + break; + } + return true; //返回值决定是否被选中 + } + }); + + fragments = new ArrayList(); + fragments.add(new ViewPagerFragment()); + fragments.add(new AddFragment()); + fragments.add(new MyInfoFragment()); + + pager2 = findViewById(R.id.vp2); + adapter = new MyFragmentAdapter(this); + pager2.setAdapter(adapter); + + //监听事件,底部按钮和pager同步 + pager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + bottomNavigationView.getMenu().getItem(position).setChecked(true); + Log.d("XXL", "onPageSelected " + position); + } + + @Override + public void onPageScrollStateChanged(int state) { + super.onPageScrollStateChanged(state); + } + }); + +// pager2.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { +// @Override +// public void onViewAttachedToWindow(View v) { +// if(v.getId() == R.id.me) +// bottomNavigationView.getMenu().getItem(1).setChecked(true); +// else if(v.getId() == R.id.pager2) +// bottomNavigationView.getMenu().getItem(2).setChecked(true); +// } +// @Override +// public void onViewDetachedFromWindow(View v) { +// +// } +// }); + /* + 获取数据源 + */ + +// Log.d("XXL", "retrofit in"); +// Retrofit retrofit = new Retrofit.Builder() +// .baseUrl(baseUrl) +// .addConverterFactory(GsonConverterFactory.create()) +// .build(); +// Log.d("XXL", "retrofit out"); +// ApiService apiService = retrofit.create(ApiService.class); +// apiService.getArticles().enqueue(new Callback>() { +// @Override +// public void onResponse(Call> call, Response> response) { +// if(response.body()!=null){ +// videos = response.body(); //设置数据 +// Log.d("XXL", "success "+videos.size()); +// //网络请求是异步的,通知信息实现同步 +// notifyDataReceive(); +// } +// } +// +// @Override +// public void onFailure(Call> call, Throwable t) { +// Log.d("retrofit", "response error"+t.getMessage()); +// } +// }); + + } + +// private void notifyDataReceive() { +// pager2 = findViewById(R.id.vp2); +// //设置pager2的滑动方向未垂直方向 +// pager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL); +// adapter = new MyFragmentAdapter(this); +// pager2.setAdapter(adapter); +// } + +// private class MyFragmentAdapter extends FragmentStateAdapter{ +// +// public MyFragmentAdapter(@NonNull FragmentActivity fragmentActivity) { +// super(fragmentActivity); +// } +// +// @NonNull +// @Override +// public Fragment createFragment(int position) { +// return VideoFragment.newInstance(videos.get(position), position); +// } +// +// +// @Override +// public int getItemCount() { +// return videos.size(); +// } +// +// } + + public void OnButtonToVideo() { + Button regis = findViewById(R.id.personButton); + regis.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(MainActivityVideo.this, PersonActivity.class); + startActivity(intent); + } + }); + } + + public void OnImageToVideo() { + ImageView regis = findViewById(R.id.support_image); + TextView supportNumber = findViewById(R.id.support_number); + regis.setOnClickListener(new View.OnClickListener() { + boolean isSupport = false; + @Override + public void onClick(View view) { + isSupport=!isSupport; + if(isSupport){ + regis.setBackground(getDrawable(R.drawable.icon_support)); + supportNumber.setText("1"); + }else { + regis.setBackground(getDrawable(R.drawable.icon_un_support1)); + supportNumber.setText("0"); + } + } + }); + } + + /* + ========================================================= + */ + private class MyFragmentAdapter extends FragmentStateAdapter { + + public MyFragmentAdapter(@NonNull FragmentActivity fragmentActivity) { + super(fragmentActivity); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + return fragments.get(position); + } + + + @Override + public int getItemCount() { + return fragments.size(); + } + + } +} diff --git a/app/src/main/java/com/example/androidtermwork/video/MyInfoFragment.java b/app/src/main/java/com/example/androidtermwork/video/MyInfoFragment.java new file mode 100644 index 0000000..8c44fac --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/MyInfoFragment.java @@ -0,0 +1,23 @@ +package com.example.androidtermwork.video; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.androidtermwork.R; + +public class MyInfoFragment extends Fragment { + private View main_view; + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + main_view = inflater.inflate(R.layout.fragment_me, container, false); + + return main_view; + } +} diff --git a/app/src/main/java/com/example/androidtermwork/video/PersonActivity.java b/app/src/main/java/com/example/androidtermwork/video/PersonActivity.java new file mode 100644 index 0000000..eb81e79 --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/PersonActivity.java @@ -0,0 +1,22 @@ +package com.example.androidtermwork.video; + +import android.os.Build; +import android.os.Bundle; +import android.text.Html; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.androidtermwork.R; +import com.example.androidtermwork.util.StatusBarUtil; + +public class PersonActivity extends AppCompatActivity { + + @RequiresApi(api = Build.VERSION_CODES.M) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.person); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/androidtermwork/video/VideoFragment.java b/app/src/main/java/com/example/androidtermwork/video/VideoFragment.java new file mode 100644 index 0000000..e10017f --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/VideoFragment.java @@ -0,0 +1,241 @@ +package com.example.androidtermwork.video; + +import android.content.Context; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.SeekBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.example.androidtermwork.R; +import com.example.androidtermwork.video.tool.VideoBean; + +import java.io.IOException; +import java.util.Timer; +import java.util.TimerTask; + +public class VideoFragment extends Fragment implements View.OnClickListener{ + private static String key = "XXL"; + private static String POS = "POS"; + private static String TAG = "XXL"; + private VideoBean video; + private MediaPlayer player; + private SurfaceView view; + private ImageButton pause_btn; + private SeekBar bar; + private int curr_pos; + private Timer timer; + private TimerTask task; + private boolean isPrepared = false; //视频资源是否加载完成 + private boolean flag = false; //设置flag,当前主页 + + public static VideoFragment newInstance(VideoBean videoBean, int pos){ + System.out.println("dddddd" + videoBean); + VideoFragment videoFragment = new VideoFragment(); + Bundle args = new Bundle(); + args.putSerializable(key, videoBean); + args.putInt(POS, pos); + videoFragment.setArguments(args); + return videoFragment; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_video, container, false); + Bundle args = getArguments(); + System.out.println("ddddddddddddddddddddddddddddddd"); + if (args != null) { + System.out.println(args); + video = (VideoBean) args.getSerializable(key); + System.out.println(video.getVideoUrl()); + curr_pos = (int) args.get(POS); + + TextView tv = v.findViewById(R.id.video_name); + tv.setText(video.getNickName()); + TextView des = v.findViewById(R.id.description); + des.setText(video.getDescription()); +// TextView like = v.findViewById(R.id.like_num); +// like.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Toast.makeText(getActivity(), "点赞维护中", Toast.LENGTH_SHORT).show(); +// } +// }); + +// Log.d(TAG, "glide in"); +// ImageView image = v.findViewById(R.id.Glide_image); +// Glide.with(getActivity()) +// .load(Uri.parse(video.getVideoUrl().replace("http://","https://"))) +// .into(image); +// image.setVisibility(View.INVISIBLE); + + pause_btn = v.findViewById(R.id.video_pause); + pause_btn.setVisibility(View.INVISIBLE); + pause_btn.setOnClickListener(this); + playVideo(v); + addTimer(v); + } + return v; + } + + /* + 进度条跟进 + * */ + private void addTimer(View v) { + bar = v.findViewById(R.id.percent); + bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + player.seekTo(seekBar.getProgress()); + } + }); + timer = new Timer(); + task = new TimerTask() { + @Override + public void run() { + if(isPrepared && player.isPlaying()) + bar.setProgress(player.getCurrentPosition()); +// Log.d(TAG, "task "+ curr_pos + " " + player.getCurrentPosition()); + } + }; + timer.schedule(task, 0,500); + } + + + private void playVideo(View v) { + player = new MediaPlayer(); + view = v.findViewById(R.id.media_view); + view.setOnClickListener(this); + SurfaceHolder h = view.getHolder(); + + h.addCallback(new SurfaceHolder.Callback() { + @Override + public void surfaceCreated(SurfaceHolder holder) { + player.setDisplay(h); //设置播放的画布 + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { + + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { +// holder.removeCallback(this); + } + }); + + Context context = getActivity(); + try { + assert context != null; +// player.setDataSource(context, Uri.parse(video.getVideoUrl().replace("http://","https://"))); + // TODO 设置数据源 + player.setDataSource(context, Uri.parse(video.getVideoUrl())); + player.prepareAsync(); //异步prepare资源 + } catch (IOException e) { + e.printStackTrace(); + } + + player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + Log.d(TAG, "prepared " + curr_pos); + bar.setMax(mp.getDuration()); + mp.setLooping(true); + isPrepared = true; //资源加载完毕 + if(flag) + mp.start(); + } + }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + if(isPrepared) { + if (player.isPlaying()) + player.stop(); + player.release(); + player = null; + } + if(timer!=null){ + timer.cancel(); + timer = null; + } + Log.d("XXL", curr_pos + " onDestroy"); + } + + @Override + public void onStart() { + super.onStart(); + Log.d(TAG, curr_pos + " onStart"); +// player.pause(); + } + + @Override + public void onStop() { + super.onStop(); + Log.d(TAG, curr_pos + " onStop"); + } + + @Override + public void onResume() { + super.onResume(); + flag = true; + if(isPrepared && !player.isPlaying()){ + player.start(); + pause_btn.setVisibility(View.INVISIBLE); + } + Log.d(TAG, curr_pos + " onResume"); + } + + @Override + public void onPause() { + super.onPause(); + if(isPrepared && player.isPlaying()){ + player.pause(); + pause_btn.setVisibility(View.VISIBLE); + } + Log.d(TAG, curr_pos + " onPause"); + } + + + /* + 暂停和继续播放 + * */ + @Override + public void onClick(View v) { + if(v.getId() == R.id.video_pause || v.getId() == R.id.media_view) { + if (player.isPlaying()) { + pause_btn.setVisibility(View.VISIBLE); + player.pause(); + } else { + pause_btn.setVisibility(View.INVISIBLE); + player.start(); + } + } + } +} diff --git a/app/src/main/java/com/example/androidtermwork/video/ViewPagerFragment.java b/app/src/main/java/com/example/androidtermwork/video/ViewPagerFragment.java new file mode 100644 index 0000000..f00d5c1 --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/ViewPagerFragment.java @@ -0,0 +1,108 @@ +package com.example.androidtermwork.video; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import com.example.androidtermwork.R; +import com.example.androidtermwork.video.tool.ApiService; +import com.example.androidtermwork.video.tool.VideoBean; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class ViewPagerFragment extends Fragment { + + private View main_view; + private List videos; //消息列表 +// private String baseUrl = "https://beiyou.bytedance.com/"; + + // TODO 更改BASE_URL + private String baseUrl = "https://www.finalc.cn/exam/"; + private ViewPager2 pager2; + private MyFragmentAdapter adapter; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + main_view = inflater.inflate(R.layout.fragment_viewpager, container, false); + getDataFromNet(); + return main_view; + } + + private void getDataFromNet() { + /* + 获取数据源 + */ + Log.d("XXL", "retrofit in"); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl(baseUrl) + .addConverterFactory(GsonConverterFactory.create()) + .build(); + Log.d("XXL", "retrofit out"); + ApiService apiService = retrofit.create(ApiService.class); + apiService.getArticles().enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.body()!=null){ + videos = response.body(); //设置数据 + Log.d("XXL", "success "+videos.size()); + //网络请求是异步的,通知信息实现同步 + notifyDataReceive(); + } else { + Log.d("XXL", call.toString()); + Log.d("XXL", response.toString()); + Log.d("XXL", "没有收到数据"); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.d("retrofit", "response error "+t.getMessage()); + } + }); + } + + private void notifyDataReceive() { + pager2 = main_view.findViewById(R.id.pager2); + //设置pager2的滑动方向未垂直方向 + pager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL); + // TODO 设置视频缓存 + pager2.setOffscreenPageLimit(1); + adapter = new MyFragmentAdapter(this); + pager2.setAdapter(adapter); + } + + private class MyFragmentAdapter extends FragmentStateAdapter { + + public MyFragmentAdapter(@NonNull ViewPagerFragment fragmentActivity) { + super(fragmentActivity); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + return VideoFragment.newInstance(videos.get(position), position); + } + + + @Override + public int getItemCount() { + return videos.size(); + } + + } +} diff --git a/app/src/main/java/com/example/androidtermwork/video/tool/ApiService.java b/app/src/main/java/com/example/androidtermwork/video/tool/ApiService.java new file mode 100644 index 0000000..eff321d --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/tool/ApiService.java @@ -0,0 +1,14 @@ +package com.example.androidtermwork.video.tool; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.GET; + +public interface ApiService { + + // https://beiyou.bytedance.com/api/invoke/video/invoke/video +// @GET("api/invoke/video/invoke/video") + @GET("1") + public Call> getArticles(); +} diff --git a/app/src/main/java/com/example/androidtermwork/video/tool/VideoBean.java b/app/src/main/java/com/example/androidtermwork/video/tool/VideoBean.java new file mode 100644 index 0000000..a714f10 --- /dev/null +++ b/app/src/main/java/com/example/androidtermwork/video/tool/VideoBean.java @@ -0,0 +1,57 @@ +package com.example.androidtermwork.video.tool; + +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; + +public class VideoBean implements Serializable { + @SerializedName("feedurl") + private String videoUrl; //mp4的url + @SerializedName("nickname") + private String nickName; //视频名称 + @SerializedName("description") + private String description; //描述 + @SerializedName("likecount") + private int likeCount; //点赞数 + @SerializedName("avatar") + private String avatar; //封面图片url + + public VideoBean(String videoUrl, String nickName, String description, int likeCount, String avatar) { + this.videoUrl = videoUrl; + this.nickName = nickName; + this.description = description; + this.likeCount = likeCount; + this.avatar = avatar; + } + + public String getNickName() { + return nickName; + } + + public String getDescription() { + return description; + } + + public int getLikeCount() { + return likeCount; + } + + public String getAvatar() { + return avatar; + } + + public String getVideoUrl() { + return videoUrl; + } + + @Override + public String toString() { + return "VideoItem{" + + "videoUrl='" + videoUrl + '\'' + + ", nickName='" + nickName + '\'' + + ", description='" + description + '\'' + + ", likeCount=" + likeCount + + ", avatar='" + avatar + '\'' + + '}'; + } +} diff --git a/app/src/main/res/drawable/default_user_avatar.png b/app/src/main/res/drawable/default_user_avatar.png new file mode 100644 index 0000000..f3aac3b Binary files /dev/null and b/app/src/main/res/drawable/default_user_avatar.png differ diff --git a/app/src/main/res/drawable/gcd.png b/app/src/main/res/drawable/gcd.png new file mode 100644 index 0000000..7ecc43c Binary files /dev/null and b/app/src/main/res/drawable/gcd.png differ diff --git a/app/src/main/res/drawable/icon_support.png b/app/src/main/res/drawable/icon_support.png new file mode 100644 index 0000000..5f0e5fc Binary files /dev/null and b/app/src/main/res/drawable/icon_support.png differ diff --git a/app/src/main/res/drawable/icon_un_support1.png b/app/src/main/res/drawable/icon_un_support1.png new file mode 100644 index 0000000..6162a96 Binary files /dev/null and b/app/src/main/res/drawable/icon_un_support1.png differ diff --git a/app/src/main/res/drawable/img.png b/app/src/main/res/drawable/img.png new file mode 100644 index 0000000..ed7ba8c Binary files /dev/null and b/app/src/main/res/drawable/img.png differ diff --git a/app/src/main/res/drawable/my_scrollbar_thumb.xml b/app/src/main/res/drawable/my_scrollbar_thumb.xml new file mode 100644 index 0000000..a49fc7f --- /dev/null +++ b/app/src/main/res/drawable/my_scrollbar_thumb.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/qg1.png b/app/src/main/res/drawable/qg1.png new file mode 100644 index 0000000..9aea78c Binary files /dev/null and b/app/src/main/res/drawable/qg1.png differ diff --git a/app/src/main/res/drawable/qg2.png b/app/src/main/res/drawable/qg2.png new file mode 100644 index 0000000..47f244d Binary files /dev/null and b/app/src/main/res/drawable/qg2.png differ diff --git a/app/src/main/res/drawable/qg4.png b/app/src/main/res/drawable/qg4.png new file mode 100644 index 0000000..75a5199 Binary files /dev/null and b/app/src/main/res/drawable/qg4.png differ diff --git a/app/src/main/res/drawable/s.png b/app/src/main/res/drawable/s.png new file mode 100644 index 0000000..722fa42 Binary files /dev/null and b/app/src/main/res/drawable/s.png differ diff --git a/app/src/main/res/layout/activity_login_page.xml b/app/src/main/res/layout/activity_login_page.xml index bc1b076..1af6cb3 100644 --- a/app/src/main/res/layout/activity_login_page.xml +++ b/app/src/main/res/layout/activity_login_page.xml @@ -17,7 +17,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" - android:src="@mipmap/icon"/> + android:src="@mipmap/icon" /> @@ -42,20 +42,20 @@ android:id="@+id/userPhone" style="@style/login_input" android:layout_below="@id/text1" - android:inputType="phone" - android:maxLength="11" android:layout_marginTop="3dp" - android:hint="请输入手机号码" /> + android:hint="请输入手机号码" + android:inputType="phone" + android:maxLength="11" /> + android:visibility="gone" /> + android:maxLength="20" /> + android:layout_alignParentRight="true" + android:layout_margin="20dp" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/article.xml b/app/src/main/res/layout/article.xml new file mode 100644 index 0000000..458bbe6 --- /dev/null +++ b/app/src/main/res/layout/article.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_add.xml b/app/src/main/res/layout/fragment_add.xml new file mode 100644 index 0000000..d752da1 --- /dev/null +++ b/app/src/main/res/layout/fragment_add.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml new file mode 100644 index 0000000..79eb65d --- /dev/null +++ b/app/src/main/res/layout/fragment_me.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_video.xml b/app/src/main/res/layout/fragment_video.xml new file mode 100644 index 0000000..0934d10 --- /dev/null +++ b/app/src/main/res/layout/fragment_video.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_viewpager.xml b/app/src/main/res/layout/fragment_viewpager.xml new file mode 100644 index 0000000..2812eb4 --- /dev/null +++ b/app/src/main/res/layout/fragment_viewpager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/person.xml b/app/src/main/res/layout/person.xml new file mode 100644 index 0000000..7c28a37 --- /dev/null +++ b/app/src/main/res/layout/person.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/points_page_item_task.xml b/app/src/main/res/layout/points_page_item_task.xml index f7841f7..065443c 100644 --- a/app/src/main/res/layout/points_page_item_task.xml +++ b/app/src/main/res/layout/points_page_item_task.xml @@ -9,6 +9,7 @@ android:layout_width="match_parent" android:layout_height="1.5dp" android:background="#efefef" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/video_fragement.xml b/app/src/main/res/layout/video_fragement.xml new file mode 100644 index 0000000..b926e0e --- /dev/null +++ b/app/src/main/res/layout/video_fragement.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index b43b329..c7fd744 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -5,19 +5,25 @@ + android:title="@string/title_home" + app:showAsAction="always" /> + android:title="" + app:showAsAction="always" /> + android:title="@string/title_notifications" + app:showAsAction="always" /> + + + + + + diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml new file mode 100644 index 0000000..b2bed68 --- /dev/null +++ b/app/src/main/res/menu/menu.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/mipmap-hdpi/add.png b/app/src/main/res/mipmap-hdpi/add.png new file mode 100644 index 0000000..76b748a Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/add.png differ diff --git a/app/src/main/res/mipmap-hdpi/camera.png b/app/src/main/res/mipmap-hdpi/camera.png new file mode 100644 index 0000000..1ff1138 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/camera.png differ diff --git a/app/src/main/res/mipmap-hdpi/coffee.png b/app/src/main/res/mipmap-hdpi/coffee.png new file mode 100644 index 0000000..0bb8847 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/coffee.png differ diff --git a/app/src/main/res/mipmap-hdpi/comment.png b/app/src/main/res/mipmap-hdpi/comment.png new file mode 100644 index 0000000..f6c00cc Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/comment.png differ diff --git a/app/src/main/res/mipmap-hdpi/hanhan.jpg b/app/src/main/res/mipmap-hdpi/hanhan.jpg new file mode 100644 index 0000000..9423789 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/hanhan.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/home_focus.png b/app/src/main/res/mipmap-hdpi/home_focus.png new file mode 100644 index 0000000..a0d7aff Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/home_focus.png differ diff --git a/app/src/main/res/mipmap-hdpi/home_unfocus.png b/app/src/main/res/mipmap-hdpi/home_unfocus.png new file mode 100644 index 0000000..a541ee6 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/home_unfocus.png differ diff --git a/app/src/main/res/mipmap-hdpi/like.png b/app/src/main/res/mipmap-hdpi/like.png new file mode 100644 index 0000000..79caaba Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/like.png differ diff --git a/app/src/main/res/mipmap-hdpi/love.png b/app/src/main/res/mipmap-hdpi/love.png new file mode 100644 index 0000000..6f9506b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/love.png differ diff --git a/app/src/main/res/mipmap-hdpi/my_focus.png b/app/src/main/res/mipmap-hdpi/my_focus.png new file mode 100644 index 0000000..93aebbc Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/my_focus.png differ diff --git a/app/src/main/res/mipmap-hdpi/my_unfocus.png b/app/src/main/res/mipmap-hdpi/my_unfocus.png new file mode 100644 index 0000000..2205e8a Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/my_unfocus.png differ diff --git a/app/src/main/res/mipmap-hdpi/nice.png b/app/src/main/res/mipmap-hdpi/nice.png new file mode 100644 index 0000000..c52adcf Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/nice.png differ diff --git a/app/src/main/res/mipmap-hdpi/nice_2.png b/app/src/main/res/mipmap-hdpi/nice_2.png new file mode 100644 index 0000000..930468b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/nice_2.png differ diff --git a/app/src/main/res/mipmap-hdpi/pause.png b/app/src/main/res/mipmap-hdpi/pause.png new file mode 100644 index 0000000..ab8e9b9 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/pause.png differ diff --git a/app/src/main/res/mipmap-hdpi/upload.png b/app/src/main/res/mipmap-hdpi/upload.png new file mode 100644 index 0000000..e0ae2fa Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/upload.png differ diff --git a/app/src/main/res/mipmap-hdpi/zhou.jpg b/app/src/main/res/mipmap-hdpi/zhou.jpg new file mode 100644 index 0000000..952037d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/zhou.jpg differ diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 2a07b87..c2ded45 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -22,4 +22,11 @@ android:name="com.example.androidtermwork.ui.notifications.NotificationsFragment" android:label="@string/title_notifications" tools:layout="@layout/fragment_notifications" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 16ef29f..5b91851 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,4 +5,16 @@ #D81B60 #FF000000 #FFFFFFFF + #6200EE + #3700B3 + #03DAC5 + #F7F7FA + #CBCBD1 + #353434 + #4E4C4C + #F7F7FA + #FFCDD2 + #FF5252 + #212121 + #BDBDBD diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 47c8224..6095b39 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,4 +2,5 @@ 16dp 16dp + 2dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 829d67d..13ef605 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,8 @@ 强国通 学习 电视台 + pause_image_button + 加载封面图 + 点赞 + 评论 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 478e10d..240629a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -15,7 +15,7 @@ #F70606 @color/colorAccent true - + +