From 1db1c84a846d5ed69c1ca9d58883f97f6f516aaf Mon Sep 17 00:00:00 2001 From: 15873037570 <3112724511@qq.com> Date: Mon, 27 May 2024 11:49:16 +0800 Subject: [PATCH] project --- .gitignore | 1 + build.gradle.kts | 40 +++++ proguard-rules.pro | 21 +++ .../eventbase/ExampleInstrumentedTest.java | 26 +++ src/main/AndroidManifest.xml | 25 +++ .../java/com/example/eventbase/DBTools.java | 23 +++ .../com/example/eventbase/MainActivity.java | 104 +++++++++++ .../com/example/eventbase/MainActivity2.java | 23 +++ .../res/drawable/ic_launcher_background.xml | 170 ++++++++++++++++++ .../res/drawable/ic_launcher_foreground.xml | 30 ++++ src/main/res/drawable/img.png | Bin 0 -> 10256 bytes src/main/res/layout/activity_main.xml | 90 ++++++++++ src/main/res/layout/activity_main2.xml | 18 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 + src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes src/main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes src/main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes src/main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes src/main/res/values-night/themes.xml | 7 + src/main/res/values/colors.xml | 5 + src/main/res/values/strings.xml | 3 + src/main/res/values/themes.xml | 9 + .../example/eventbase/ExampleUnitTest.java | 17 ++ 30 files changed, 624 insertions(+) create mode 100644 .gitignore create mode 100644 build.gradle.kts create mode 100644 proguard-rules.pro create mode 100644 src/androidTest/java/com/example/eventbase/ExampleInstrumentedTest.java create mode 100644 src/main/AndroidManifest.xml create mode 100644 src/main/java/com/example/eventbase/DBTools.java create mode 100644 src/main/java/com/example/eventbase/MainActivity.java create mode 100644 src/main/java/com/example/eventbase/MainActivity2.java create mode 100644 src/main/res/drawable/ic_launcher_background.xml create mode 100644 src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 src/main/res/drawable/img.png create mode 100644 src/main/res/layout/activity_main.xml create mode 100644 src/main/res/layout/activity_main2.xml create mode 100644 src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 src/main/res/values-night/themes.xml create mode 100644 src/main/res/values/colors.xml create mode 100644 src/main/res/values/strings.xml create mode 100644 src/main/res/values/themes.xml create mode 100644 src/test/java/com/example/eventbase/ExampleUnitTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..223cde8 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,40 @@ +plugins { + id("com.android.application") +} + +android { + namespace = "com.example.eventbase" + compileSdk = 34 + + defaultConfig { + applicationId = "com.example.eventbase" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.9.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + implementation("org.greenrobot:eventbus:3.3.1") +} \ No newline at end of file diff --git a/proguard-rules.pro b/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/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/src/androidTest/java/com/example/eventbase/ExampleInstrumentedTest.java b/src/androidTest/java/com/example/eventbase/ExampleInstrumentedTest.java new file mode 100644 index 0000000..68a817f --- /dev/null +++ b/src/androidTest/java/com/example/eventbase/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.eventbase; + +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.eventbase", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml new file mode 100644 index 0000000..23f9698 --- /dev/null +++ b/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/example/eventbase/DBTools.java b/src/main/java/com/example/eventbase/DBTools.java new file mode 100644 index 0000000..a1423a3 --- /dev/null +++ b/src/main/java/com/example/eventbase/DBTools.java @@ -0,0 +1,23 @@ +package com.example.eventbase; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import androidx.annotation.Nullable; + +public class DBTools extends SQLiteOpenHelper { + public DBTools(@Nullable Context context,@Nullable String name,@Nullable SQLiteDatabase.CursorFactory factory,int version){ + super(context,name,factory,version); + + } + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("create table user(id integer primary key autoincrement,username varchar(20),age integer)"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } +} diff --git a/src/main/java/com/example/eventbase/MainActivity.java b/src/main/java/com/example/eventbase/MainActivity.java new file mode 100644 index 0000000..906267b --- /dev/null +++ b/src/main/java/com/example/eventbase/MainActivity.java @@ -0,0 +1,104 @@ +package com.example.eventbase; + +import androidx.appcompat.app.AppCompatActivity; + +import android.animation.ObjectAnimator; +import android.animation.PropertyValuesHolder; +import android.animation.ValueAnimator; +import android.content.ContentValues; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + EventBus.getDefault().register(this); + findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, MainActivity2.class); + startActivity(intent); + } + }); + ImageView imageView = findViewById(R.id.imageView); + findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(imageView,"translationX",0,500); +//// objectAnimator.setDuration(5000); +//// objectAnimator.start(); + DBTools dbTools =new DBTools(MainActivity.this,"test",null,1); + SQLiteDatabase sqLiteDatabase = dbTools.getReadableDatabase(); + ContentValues contentValues =new ContentValues(); + contentValues.put("username","计科一班"); + contentValues.put("age",20); + sqLiteDatabase.insert("user",null,contentValues); + } + }); + findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(imageView,"alpha",1,0); +// objectAnimator.setDuration(5000); +// objectAnimator.start(); + DBTools dbTools =new DBTools(MainActivity.this,"test",null,1); + SQLiteDatabase sqLiteDatabase = dbTools.getReadableDatabase(); + sqLiteDatabase.delete("user","username=?",new String[]{"test1"}); + } + }); + findViewById(R.id.button5).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(imageView,"scaleX",1,0,2); +// objectAnimator.setDuration(5000); +// objectAnimator.start(); + DBTools dbTools =new DBTools(MainActivity.this,"test",null,1); + SQLiteDatabase sqLiteDatabase = dbTools.getReadableDatabase(); + Cursor cursor = sqLiteDatabase.query("user",new String[]{"id","username","age"}, + "username=?",new String[]{"计科一班"},null,null,null); + while (cursor.moveToNext()){ + int id = cursor.getInt(cursor.getColumnIndex("id")); + String username = cursor.getString(cursor.getColumnIndex("username")); + int age =cursor.getInt(cursor.getColumnIndex("age")); + Log.i("test",id+username+age); + } + } + }); + findViewById(R.id.button6).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ObjectAnimator objectAnimator =ObjectAnimator.ofFloat(imageView,"rotation",0,180); + objectAnimator.setDuration(5000); + objectAnimator.start(); + } + }); + findViewById(R.id.button7).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// PropertyValuesHolder propertyValuesHolder = PropertyValuesHolder.ofFloat("scaleX",0,2f); +// PropertyValuesHolder propertyValuesHolder1 = PropertyValuesHolder.ofFloat("scaleY",0,2f); +// PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("alpha",0,2f); +// ValueAnimator valueAnimator =ObjectAnimator.ofPropertyValuesHolder(imageView,propertyValuesHolder,propertyValuesHolder1,propertyValuesHolder2); +// valueAnimator.setDuration(5000); +// valueAnimator.start(); + } + }); + } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMassage(String massage){ + Log.i("test",massage); + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/eventbase/MainActivity2.java b/src/main/java/com/example/eventbase/MainActivity2.java new file mode 100644 index 0000000..15594c4 --- /dev/null +++ b/src/main/java/com/example/eventbase/MainActivity2.java @@ -0,0 +1,23 @@ +package com.example.eventbase; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.view.View; + +import org.greenrobot.eventbus.EventBus; + +public class MainActivity2 extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main2); + findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventBus.getDefault().post("hello world"); + } + }); + } +} \ No newline at end of file diff --git a/src/main/res/drawable/ic_launcher_background.xml b/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/res/drawable/ic_launcher_foreground.xml b/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/res/drawable/img.png b/src/main/res/drawable/img.png new file mode 100644 index 0000000000000000000000000000000000000000..73c061e9f3dc7b080c33e7c9f625d861e4afdb62 GIT binary patch literal 10256 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 + + + + +