diff --git a/.idea/misc.xml b/.idea/misc.xml
index bb506a3..13e7453 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,12 +3,10 @@
-
-
-
+
@@ -24,7 +22,11 @@
+
+
+
+
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java
index cde184d..b56eb3c 100644
--- a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java
+++ b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java
@@ -1,11 +1,20 @@
package org.ntlab.acanthus_client.views;
+import android.content.Intent;
import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
import com.google.android.material.bottomnavigation.BottomNavigationView;
+import org.ntlab.acanthus_client.Acanthus;
import org.ntlab.acanthus_client.R;
import org.ntlab.acanthus_client.databinding.ActivityMainBinding;
+import org.ntlab.acanthus_client.views.main_menu_ui.mypage.MyPageFragment;
+import org.ntlab.acanthus_client.views.paint.SendScreenShotActivity;
+import org.ntlab.acanthus_client.views.userpage.UserPageActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
@@ -17,6 +26,7 @@
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
+ Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -37,4 +47,22 @@
NavigationUI.setupWithNavController(binding.navView, navController);
}
+ // ツールバーにIconを表示
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.botton_nav_icon, menu);
+ return true;
+ }
+ // Iconを押したときMyPageに遷移させたい
+// @Override
+// public boolean onOptionsItemSelected(MenuItem item) {
+// switch (item.getItemId()) {
+// case R.id.icon:
+// intent = new Intent(getApplication(), MyPageFragment.class);
+// startActivity(intent);
+// return true;
+// }
+// return super.onOptionsItemSelected(item);
+// }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java
index 0c73651..4095dc7 100644
--- a/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java
+++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation_detail/AnimationDetailActivity.java
@@ -3,15 +3,24 @@
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
import org.ntlab.acanthus_client.R;
-import org.ntlab.acanthus_client.databinding.ActivityPaintBinding;
import org.ntlab.acanthus_client.views.animation.AnimationActivity;
import org.ntlab.acanthus_client.views.animation.AnimationCanvas;
-import org.ntlab.acanthus_client.views.main_menu_ui.mypage.MyPageFragment;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
public class AnimationDetailActivity extends AppCompatActivity {
@@ -23,6 +32,23 @@
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation_detail);
+ //文字入力テスト
+ EditText editText = findViewById(R.id.edit_text);
+ TextView wordText = findViewById(R.id.word_text);
+ TextView wordText2 = findViewById(R.id.word_text2);
+ Button wordButton = findViewById(R.id.word_button);
+
+ wordButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // エディットテキストのテキストを取得
+ String text = editText.getText().toString();
+ // 取得したテキストを TextView に張り付ける
+ wordText.setText(text);
+ wordText2.setText(text);
+ }
+ });
+
//画面を閉じる
Button returnButton = findViewById(R.id.return_button);
returnButton.setOnClickListener(v -> finish());
@@ -30,18 +56,56 @@
//作成者のページに移動(今は仮でアニメーション画面へ)
Button buttonEditor1 = findViewById(R.id.button_editor1);
buttonEditor1.setOnClickListener((View v) -> {
- Intent intent = new Intent(AnimationDetailActivity.this, AnimationActivity.class);
- startActivity(intent);
- }
+ Intent intent = new Intent(AnimationDetailActivity.this, AnimationActivity.class);
+ startActivity(intent);
+ }
);
- //作成者のページに移動(今は仮でアニメーション画面へ)
+ /* //作成者のページに移動(今は仮でアニメーション画面へ)
Button buttonEditor2 = findViewById(R.id.button_editor2);
buttonEditor2.setOnClickListener((View v) -> {
- Intent intent = new Intent(AnimationDetailActivity.this, AnimationActivity.class);
- startActivity(intent);
- }
+ Intent intent = new Intent(AnimationDetailActivity.this, AnimationActivity.class);
+ startActivity(intent);
+ }
);
+
+*//* //レイアウトパラム定数(縦横の長さの定数)の格納
+ final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
+ final int MP = ViewGroup.LayoutParams.MATCH_PARENT;*//*
+
+ //基礎画面の作成
+ LinearLayout oLayout = new LinearLayout(getApplicationContext());
+ oLayout.setOrientation(LinearLayout.VERTICAL);
+ setContentView(oLayout);
+
+*//* //普通のviewの生成
+ ImageView oImg = new ImageView(getApplicationContext());
+ //横MAXの縦幅は画像と同じ高さ
+ oImg.setLayoutParams(new LinearLayout.LayoutParams(MP, WC));*//*
+
+ ImageView oImg = findViewById(R.id.samune);
+
+ URL url;
+ InputStream stream;
+ try {
+ //画像のURLを直うち
+ url = new URL("http://nitta-lab-www.is.konan-u.ac.jp/gallery/test/0/test.jpg");
+ //インプットストリームで画像を読み込む
+ stream = url.openStream();
+ //読み込んだファイルをビットマップに変換
+ Bitmap oBmp = BitmapFactory.decodeStream(stream);
+ //ビットマップをImageViewに設定
+ oImg.setImageBitmap(oBmp);
+ //インプットストリームを閉じる
+ stream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ oLayout.addView(oImg);*/
}
+
}
+
+
+
diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java
index 732e525..a98df51 100644
--- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java
+++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/SendScreenShotActivity.java
@@ -3,111 +3,137 @@
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
+import android.graphics.ImageFormat;
+import android.os.Bundle;
import android.content.Intent;
import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
+import android.graphics.PixelFormat;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
+import android.media.Image;
+import android.media.ImageReader;
+import android.media.projection.MediaProjection;
+import android.media.projection.MediaProjectionManager;
+import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.View;
import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.Toast;
import org.ntlab.acanthus_client.R;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import java.nio.ByteBuffer;
-public class SendScreenShotActivity extends Activity implements View.OnClickListener {
+import static android.graphics.ImageFormat.JPEG;
+
+
+public class SendScreenShotActivity extends Activity {
+
+ private MediaProjectionManager mpManager;
+ private MediaProjection mProjection;
+ private static final int REQUEST_MEDIA_PROJECTION = 1001;
+
+ private int displayWidth, displayHeight;
+ private ImageReader imageReader;
+ private VirtualDisplay virtualDisplay;
+ private int screenDensity;
+ private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send_screen_shot);
- // 全体キャプチャ
- Button captureAll = (Button)findViewById(R.id.capture_all);
- captureAll.setOnClickListener(this);
- // アイコン画像のみキャプチャ
- Button captureIcon = (Button)findViewById(R.id.capture_icon);
- captureIcon.setOnClickListener(this);
+ Button button = findViewById(R.id.capture);
+ // ボタンタップでスクリーンショットを撮る
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ getScreenshot();
+ }
+ });
- // キャプチャした画像を添付してメールを送る
- Button sendMail = (Button)findViewById(R.id.send_mail);
- sendMail.setOnClickListener(this);
+ // 撮影したスクリーンを表示するImageView
+ imageView = findViewById(R.id.image);
+ // 画面の縦横サイズとdpを取得
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
+ screenDensity = displayMetrics.densityDpi;
+ displayWidth = displayMetrics.widthPixels;
+ displayHeight = displayMetrics.heightPixels;
+
+ mpManager = (MediaProjectionManager)
+ getSystemService(MEDIA_PROJECTION_SERVICE);
+
+ // permissionを確認するintentを投げ、ユーザーの許可・不許可を受け取る
+ if(mpManager != null){
+ startActivityForResult(mpManager.createScreenCaptureIntent(),
+ REQUEST_MEDIA_PROJECTION);
+ }
+ }
+
+ // ユーザーの許可を受け取る
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if (REQUEST_MEDIA_PROJECTION == requestCode) {
+ if (resultCode != RESULT_OK) {
+ // 拒否された
+ Toast.makeText(this,
+ "User cancelled", Toast.LENGTH_LONG).show();
+ return;
+ }
+ // 許可された結果を受け取る
+ setUpMediaProjection(resultCode, data);
+ }
+ }
+
+ private void setUpMediaProjection(int code, Intent intent) {
+ mProjection = mpManager.getMediaProjection(code, intent);
+ setUpVirtualDisplay();
+ }
+
+ private void setUpVirtualDisplay() {
+ imageReader = ImageReader.newInstance(
+ displayWidth, displayHeight, 0x1, 2);
+
+ virtualDisplay = mProjection.createVirtualDisplay("ScreenCapture",
+ displayWidth, displayHeight, screenDensity,
+ DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
+ imageReader.getSurface(), null, null);
+ }
+
+ private void getScreenshot() {
+ // ImageReaderから画面を取り出す
+ Log.d("debug", "getScreenshot");
+
+ Image image = imageReader.acquireLatestImage();
+ Image.Plane[] planes = image.getPlanes();
+ ByteBuffer buffer = planes[0].getBuffer();
+
+ int pixelStride = planes[0].getPixelStride();
+ int rowStride = planes[0].getRowStride();
+ int rowPadding = rowStride - pixelStride * displayWidth;
+
+ // バッファからBitmapを生成
+ Bitmap bitmap = Bitmap.createBitmap(
+ displayWidth + rowPadding / pixelStride, displayHeight,
+ Bitmap.Config.ARGB_8888);
+ bitmap.copyPixelsFromBuffer(buffer);
+ image.close();
+
+ imageView.setImageBitmap(bitmap);
}
@Override
- public void onClick(View v) {
- // 読み書きするファイル名を指定
- File file = new File(Environment.getExternalStorageDirectory() + "/capture.jpeg");
- // 指定したファイル名が無ければ作成する。
- file.getParentFile().mkdir();
-
- switch(v.getId()) {
- case R.id.capture_all:
- // 全体を撮る
- saveCapture(findViewById(android.R.id.content),file);
- break;
- case R.id.capture_icon:
- // View1を撮る
- saveCapture(findViewById(R.id.icon),file);
- break;
- case R.id.send_mail:
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_SEND);
- intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"s1871104@s.konan-u.ac.jp"});
- intent.setType("message/rfc822");
- intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
- startActivity(intent);
-
- break;
+ protected void onDestroy() {
+ if (virtualDisplay != null) {
+ Log.d("debug","release VirtualDisplay");
+ virtualDisplay.release();
}
+ super.onDestroy();
}
-
- /**
- * 撮ったキャプチャを保存
- * @param view
- * @param 書き込み先ファイルfile
- */
- public void saveCapture(View view, File file) {
- // キャプチャを撮る
- Bitmap capture = getViewCapture(view);
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(file, false);
- // 画像のフォーマットと画質と出力先を指定して保存
- capture.compress(Bitmap.CompressFormat.JPEG, 100, fos);
- fos.flush();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException ie) {
- fos = null;
- }
- }
- }
- }
-
- /**
- * キャプチャを撮る
- * @param 撮りたいview
- * @return 撮ったキャプチャ(Bitmap)
- */
- public Bitmap getViewCapture(View view) {
- view.setDrawingCacheEnabled(true);
-
- // Viewのキャプチャを取得
- Bitmap cache = view.getDrawingCache();
- if(cache == null){
- return null;
- }
- Bitmap screenShot = Bitmap.createBitmap(cache);
- view.setDrawingCacheEnabled(false);
- return screenShot;
- }
-
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/icon_jen_1007042258.png b/app/src/main/res/drawable/icon_jen_1007042258.png
new file mode 100644
index 0000000..1253e7a
--- /dev/null
+++ b/app/src/main/res/drawable/icon_jen_1007042258.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_animation_detail.xml b/app/src/main/res/layout/activity_animation_detail.xml
index 66148e1..06897a0 100644
--- a/app/src/main/res/layout/activity_animation_detail.xml
+++ b/app/src/main/res/layout/activity_animation_detail.xml
@@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/animationDetails"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:background="#F7F7F7">
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintVertical_bias="0.043" />
+ app:layout_constraintVertical_bias="0.424" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.478" />
+
+
+
+
+ app:layout_constraintVertical_bias="0.527" />
+ app:layout_constraintVertical_bias="0.972" />
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_send_screen_shot.xml b/app/src/main/res/layout/activity_send_screen_shot.xml
index 5bef23e..2d64116 100644
--- a/app/src/main/res/layout/activity_send_screen_shot.xml
+++ b/app/src/main/res/layout/activity_send_screen_shot.xml
@@ -3,34 +3,21 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="300dp"
- android:translationY="175dp"
+ android:layout_height="match_parent"
tools:context=".views.paint.SendScreenShotActivity">
-
-
+ app:layout_constraintTop_toBottomOf="@+id/image"
+ app:layout_constraintVertical_bias="0.247" />
-
-
+
+
+ app:layout_constraintVertical_bias="0.206" />
+ app:layout_constraintTop_toBottomOf="@+id/image"
+ app:layout_constraintVertical_bias="0.0" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/botton_nav_icon.xml b/app/src/main/res/menu/botton_nav_icon.xml
new file mode 100644
index 0000000..fc8a6d4
--- /dev/null
+++ b/app/src/main/res/menu/botton_nav_icon.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b8d59bd..89a98a2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,4 +14,5 @@
Not a valid username
Password must be >5 characters
"Login failed"
+ Icon
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 79c656c..95dae99 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.2.2'
+ classpath 'com.android.tools.build:gradle:7.0.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a813658..ce2cae2 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri May 28 14:05:07 JST 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME