commit 5b5c61e0a79bd81df9bc30df6069420a82d388d8 Author: wds Date: Tue May 25 14:44:35 2021 +0800 feat: 项目初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..603b140 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ac6b0ae --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..1d883ac --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..37a7509 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..f984193 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,58 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "com.example.myapplication" + minSdkVersion 16 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.navigation:navigation-fragment:2.1.0' + implementation 'androidx.navigation:navigation-ui:2.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + //butterknife依赖 + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + + + //网络框架 + implementation 'com.lzy.net:okgo:3.0.4' + implementation 'com.google.code.gson:gson:2.8.5' + + + //retrofit+rxjava + implementation 'com.squareup.retrofit2:retrofit:2.5.0' + implementation 'com.squareup.retrofit2:converter-gson:2.3.0' + //转换器,请求结果转换成Model + implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' + //配合Rxjava 使用 + implementation 'io.reactivex.rxjava2:rxjava:2.2.7' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + + +//加载图片的依赖包 + implementation 'com.github.bumptech.glide:glide:4.8.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.java new file mode 100644 index 0000000..982ba51 --- /dev/null +++ b/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.myapplication; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.myapplication", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..40f8188 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/activity/HomeActivity.java b/app/src/main/java/com/example/myapplication/activity/HomeActivity.java new file mode 100644 index 0000000..99bda04 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/activity/HomeActivity.java @@ -0,0 +1,32 @@ +package com.example.myapplication.activity; + +import android.os.Bundle; + +import com.example.myapplication.base.BaseActivity; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import android.view.View; + +import com.example.myapplication.R; + +public class HomeActivity extends BaseActivity { + @Override + protected int getLayout() { + return R.layout.activity_home; + } + + @Override + protected void initView() { + super.initView(); + } + + @Override + protected void initData() { + super.initData(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/activity/MainActivity.java b/app/src/main/java/com/example/myapplication/activity/MainActivity.java new file mode 100644 index 0000000..6983698 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/activity/MainActivity.java @@ -0,0 +1,26 @@ +package com.example.myapplication.activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import com.example.myapplication.R; +import com.example.myapplication.base.BaseActivity; + +public class MainActivity extends BaseActivity { + + @Override + protected int getLayout() { + return R.layout.activity_main; + } + + @Override + protected void initData() { + super.initData(); + } + + @Override + protected void initView() { + super.initView(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/api/ApiService.java b/app/src/main/java/com/example/myapplication/api/ApiService.java new file mode 100644 index 0000000..980a3c6 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/api/ApiService.java @@ -0,0 +1,4 @@ +package com.example.myapplication.api; + +public interface ApiService { +} diff --git a/app/src/main/java/com/example/myapplication/api/UserApplication.java b/app/src/main/java/com/example/myapplication/api/UserApplication.java new file mode 100644 index 0000000..15c0db5 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/api/UserApplication.java @@ -0,0 +1,20 @@ +package com.example.myapplication.api; + +import android.app.Application; + + +public class UserApplication extends Application { + public static UserApplication userApplication; + + @Override + public void onCreate() { + super.onCreate(); + userApplication=this; + } + + public static UserApplication getUserApplication() { + return userApplication; + } + + +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseActivity.java b/app/src/main/java/com/example/myapplication/base/BaseActivity.java new file mode 100644 index 0000000..f0ca7e4 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseActivity.java @@ -0,0 +1,55 @@ +package com.example.myapplication.base; + +import android.os.Bundle; + +import android.widget.Toast; + + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.myapplication.api.UserApplication; + +import butterknife.ButterKnife; +import butterknife.Unbinder; + +public abstract class BaseActivity extends AppCompatActivity { + + private Unbinder bind; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayout()); + bind = ButterKnife.bind(this); + initMVP(); + initView(); + initData(); + initListener(); + } + protected void toast(String mag){ + Toast.makeText(UserApplication.getUserApplication(), mag, Toast.LENGTH_SHORT).show(); + } + protected void initMVP() { + } + + protected void initListener() { + + } + + protected abstract int getLayout(); + + protected void initView() { + + } + + protected void initData() { + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + bind.unbind(); + } +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseCallBack.java b/app/src/main/java/com/example/myapplication/base/BaseCallBack.java new file mode 100644 index 0000000..d96939e --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseCallBack.java @@ -0,0 +1,6 @@ +package com.example.myapplication.base; + +public interface BaseCallBack { + void onSuccess(T t); + void onFail(String error); +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseFragment.java b/app/src/main/java/com/example/myapplication/base/BaseFragment.java new file mode 100644 index 0000000..af58175 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseFragment.java @@ -0,0 +1,50 @@ +package com.example.myapplication.base; + +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 butterknife.ButterKnife; +import butterknife.Unbinder; + +public abstract class BaseFragment extends Fragment { + + private Unbinder bind; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View inflate = inflater.inflate(getLayout(), container, false); + bind = ButterKnife.bind(this, inflate); + initMvp(); + initView(); + initData(); + return inflate; + } + + protected void initMvp() { + + } + + protected abstract int getLayout(); + + protected void initData() { + + } + + protected void initView() { + + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + bind.unbind(); + } +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseMVPActivity.java b/app/src/main/java/com/example/myapplication/base/BaseMVPActivity.java new file mode 100644 index 0000000..2f6643b --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseMVPActivity.java @@ -0,0 +1,18 @@ +package com.example.myapplication.base; + +public abstract class BaseMVPActivity

extends BaseActivity{ + protected P presenter; + + @Override + protected void initMVP() { + super.initMVP(); + presenter= initMVPPresenter(); + if (presenter!=null){ + presenter.setView(initMVPView()); + } } + + protected abstract V initMVPView(); + + protected abstract P initMVPPresenter(); + +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseMVPFragment.java b/app/src/main/java/com/example/myapplication/base/BaseMVPFragment.java new file mode 100644 index 0000000..c9703cd --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseMVPFragment.java @@ -0,0 +1,19 @@ +package com.example.myapplication.base; + +public abstract class BaseMVPFragment

extends BaseFragment{ + protected P presenter; + + @Override + protected void initMvp() { + super.initMvp(); + presenter= initMVPPresenter(); + if (presenter!=null){ + presenter.setView(initMVPView()); + } + } + + protected abstract V initMVPView(); + + protected abstract P initMVPPresenter(); + +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseModel.java b/app/src/main/java/com/example/myapplication/base/BaseModel.java new file mode 100644 index 0000000..e7ab463 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseModel.java @@ -0,0 +1,12 @@ +package com.example.myapplication.base; + +import io.reactivex.disposables.CompositeDisposable; + +public abstract class BaseModel { + private CompositeDisposable compositeDisposable; + public void onDestroy(){ + if (compositeDisposable!=null){ + compositeDisposable.clear(); + } + } +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseObserver.java b/app/src/main/java/com/example/myapplication/base/BaseObserver.java new file mode 100644 index 0000000..a8f77c2 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseObserver.java @@ -0,0 +1,61 @@ +package com.example.myapplication.base; + +import android.net.ParseException; +import android.util.Log; +import android.widget.Toast; + +import com.example.myapplication.api.UserApplication; +import com.google.gson.JsonParseException; + +import org.json.JSONException; + +import java.io.InterruptedIOException; +import java.net.ConnectException; +import java.net.UnknownHostException; + +import io.reactivex.subscribers.ResourceSubscriber; +import retrofit2.HttpException; + +public abstract class BaseObserver extends ResourceSubscriber { + @Override + public void onNext(T t) { + onSuccess(t); + } + public abstract void onSuccess(T t); + @Override + public void onError(Throwable e) { + Log.e("TAG", "error:" + e.getMessage()); + //对异常进行分类,不同的异常提示用户不同的信息 + if (e instanceof HttpException) { + // HTTP错误 + onFail("HTTP错误"); + } else if (e instanceof ConnectException + || e instanceof UnknownHostException) { + // 连接错误 + onFail("连接错误"); + } else if (e instanceof InterruptedIOException) { + // 连接超时 + onFail("连接超时"); + } else if (e instanceof JsonParseException + || e instanceof JSONException + || e instanceof ParseException) { + // 解析错误 + onFail("解析错误"); + } else { + if (e != null) { + onFail(e.toString()); + } else { + onFail("未知错误"); + } + } + } + + protected void onFail(String error){ + Toast.makeText(UserApplication.getUserApplication(), error, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onComplete() { + + } +} diff --git a/app/src/main/java/com/example/myapplication/base/BasePresenter.java b/app/src/main/java/com/example/myapplication/base/BasePresenter.java new file mode 100644 index 0000000..d06e2b8 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BasePresenter.java @@ -0,0 +1,28 @@ +package com.example.myapplication.base; + +import java.util.ArrayList; + +public abstract class BasePresenter { + protected V view; + private ArrayList list=new ArrayList<>(); + public void setView(V view) { + this.view = view; + } + + public BasePresenter() { + initModel(); + } + public void onDestroy(){ + view=null; + if (list.size()>0){ + for (BaseModel baseModel : list) { + baseModel.onDestroy(); + } + list.clear(); + } + } + public void addModel(BaseModel baseModel){ + list.add(baseModel); + } + protected abstract void initModel(); +} diff --git a/app/src/main/java/com/example/myapplication/base/BaseView.java b/app/src/main/java/com/example/myapplication/base/BaseView.java new file mode 100644 index 0000000..0e62e31 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/base/BaseView.java @@ -0,0 +1,6 @@ +package com.example.myapplication.base; + +public interface BaseView { + void onSuccess(T t); + void onFail(String error); +} diff --git a/app/src/main/java/com/example/myapplication/fragment/FindFragment.java b/app/src/main/java/com/example/myapplication/fragment/FindFragment.java new file mode 100644 index 0000000..61a723c --- /dev/null +++ b/app/src/main/java/com/example/myapplication/fragment/FindFragment.java @@ -0,0 +1,25 @@ +package com.example.myapplication.fragment; + +import com.example.myapplication.R; +import com.example.myapplication.base.BaseFragment; + +/** + * 发现的Fragment + * 2021-5-25 + */ +public class FindFragment extends BaseFragment { + @Override + protected int getLayout() { + return R.layout.find_fragment; + } + + @Override + protected void initView() { + super.initView(); + } + + @Override + protected void initData() { + super.initData(); + } +} diff --git a/app/src/main/java/com/example/myapplication/fragment/MineFragment.java b/app/src/main/java/com/example/myapplication/fragment/MineFragment.java new file mode 100644 index 0000000..1d336e5 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/fragment/MineFragment.java @@ -0,0 +1,25 @@ +package com.example.myapplication.fragment; + +import com.example.myapplication.R; +import com.example.myapplication.base.BaseFragment; + +/** + * 我的的Fragment + * 2021-5-25 + */ +public class MineFragment extends BaseFragment { + @Override + protected int getLayout() { + return R.layout.mine_fragment; + } + + @Override + protected void initView() { + super.initView(); + } + + @Override + protected void initData() { + super.initData(); + } +} diff --git a/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java b/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java new file mode 100644 index 0000000..441c6fd --- /dev/null +++ b/app/src/main/java/com/example/myapplication/fragment/RecordFragment.java @@ -0,0 +1,24 @@ +package com.example.myapplication.fragment; + +import com.example.myapplication.R; +import com.example.myapplication.base.BaseFragment; + +/** + * 记录的Fragment + * 2021-5-25 + */ +public class RecordFragment extends BaseFragment { + @Override + protected int getLayout() { + return R.layout.record_fragment; + } + @Override + protected void initView() { + super.initView(); + } + + @Override + protected void initData() { + super.initData(); + } +} diff --git a/app/src/main/java/com/example/myapplication/fragment/TreasureFragment.java b/app/src/main/java/com/example/myapplication/fragment/TreasureFragment.java new file mode 100644 index 0000000..30b35df --- /dev/null +++ b/app/src/main/java/com/example/myapplication/fragment/TreasureFragment.java @@ -0,0 +1,25 @@ +package com.example.myapplication.fragment; + +import com.example.myapplication.R; +import com.example.myapplication.base.BaseFragment; + +/** + * 寻宝的Fragment + * 2021-5-25 + */ +public class TreasureFragment extends BaseFragment { + @Override + protected int getLayout() { + return R.layout.treasure_fragment; + } + + @Override + protected void initView() { + super.initView(); + } + + @Override + protected void initData() { + super.initData(); + } +} diff --git a/app/src/main/java/com/example/myapplication/net/DataService.java b/app/src/main/java/com/example/myapplication/net/DataService.java new file mode 100644 index 0000000..b581262 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/net/DataService.java @@ -0,0 +1,80 @@ +package com.example.myapplication.net; + +import com.lzy.okgo.interceptor.HttpLoggingInterceptor; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.concurrent.TimeUnit; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import retrofit2.Converter; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +public class DataService { + + private static final long DEFAULT_TIMEOUT = 20000; // 默认超时20s + private static Object mApiService; + + private static ArrayList mInterceptors; + private static Converter.Factory mFactor; + private static Class mServiceClass; + private static String mBaseUrl; + + public static void init(Class aClass, String baseUrl, ArrayList interceptor, Converter.Factory factor) { + mServiceClass = aClass; + mBaseUrl = baseUrl; + mInterceptors = interceptor; + mFactor = factor; + + } + + public static void init(Class aClass, String baseUrl, ArrayList interceptor) { + init(aClass, baseUrl, interceptor, null); + + } + + public static void init(Class aClass, String baseUrl, Converter.Factory factor) { + init(aClass, baseUrl, null, factor); + + } + + public static void init(Class aClass, String baseUrl) { + init(aClass, baseUrl, null, null); + + } + + public static synchronized Object getApiService() { + + if (mServiceClass == null) { + throw new NullPointerException("在调用 DataService 的 getApiService 之前必须调用 init 方法惊喜初始化"); + } + + if (mApiService == null) { + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + if (mInterceptors != null && mInterceptors.size() > 0) { + for (Interceptor interceptor : mInterceptors) { + builder.addInterceptor(interceptor); + } + } + + builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS) + .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS) + .readTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS) + .build(); + + Retrofit retrofit = new Retrofit.Builder() + .client(builder.build()) + .addConverterFactory(mFactor == null ? GsonConverterFactory.create() : mFactor) // 帮我们把json 窜转为 entity 对象 + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 结合 rxjava 使用 + .baseUrl(mBaseUrl) + .build(); + + mApiService = retrofit.create(mServiceClass); + } + + return mApiService; + } +} diff --git a/app/src/main/java/com/example/myapplication/util/NoSlideViewPager.java b/app/src/main/java/com/example/myapplication/util/NoSlideViewPager.java new file mode 100644 index 0000000..d5446ca --- /dev/null +++ b/app/src/main/java/com/example/myapplication/util/NoSlideViewPager.java @@ -0,0 +1,64 @@ +package com.example.myapplication.util; + +import android.content.Context; + +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.viewpager.widget.ViewPager; + +//自定义不可滑动的VI +public class NoSlideViewPager extends ViewPager { + // 定义一个是否可以滑动的boolean 值 + private boolean isCanScroll = false; + + public NoSlideViewPager(@NonNull Context context) { + super(context); + } + + public NoSlideViewPager(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + + // 滑动到指定位置 + @Override + public void scrollTo(int x, int y) { + super.scrollTo(x, y); + } + + // 触摸事件 + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (isCanScroll) { + return super.onTouchEvent(ev); + } else { + return false; + } + } + + // 设置当前显示的布局 + @Override + public void setCurrentItem(int item) { + super.setCurrentItem(item); + } + + // 设置当前显示的布局,并定义滑动方式 + @Override + public void setCurrentItem(int item, boolean smoothScroll) { + super.setCurrentItem(item, smoothScroll); + } + + + // 拦截触摸事件 + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (isCanScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..dadffde --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..77e23a4 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/find_fragment.xml b/app/src/main/res/layout/find_fragment.xml new file mode 100644 index 0000000..8aaf486 --- /dev/null +++ b/app/src/main/res/layout/find_fragment.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine_fragment.xml b/app/src/main/res/layout/mine_fragment.xml new file mode 100644 index 0000000..61a4490 --- /dev/null +++ b/app/src/main/res/layout/mine_fragment.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/record_fragment.xml b/app/src/main/res/layout/record_fragment.xml new file mode 100644 index 0000000..59c5f24 --- /dev/null +++ b/app/src/main/res/layout/record_fragment.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/treasure_fragment.xml b/app/src/main/res/layout/treasure_fragment.xml new file mode 100644 index 0000000..dbfe1ee --- /dev/null +++ b/app/src/main/res/layout/treasure_fragment.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..a571e60 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..61da551 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..c41dd28 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..db5080a Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..6dba46d Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..da31a87 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..15ac681 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..b216f2d Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..f25a419 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..e96783c Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml new file mode 100644 index 0000000..1e8b0fa --- /dev/null +++ b/app/src/main/res/navigation/nav_graph.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..4faecfa --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #6200EE + #3700B3 + #03DAC5 + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..125df87 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,3 @@ + + 16dp + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..bfc0b4a --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,12 @@ + + MyApplication + HomeActivity + + First Fragment + Second Fragment + Next + Previous + + Hello first fragment + Hello second fragment. Arg: %1$s + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..21d9ced --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,19 @@ + + + + + + +