🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1634閲覧

プログラムでLinearLayoutの中身のbitmapを取得したい

adk

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2019/11/18 02:40

お世話になっています。

現状、下記のような構成のActivityを作っています。

mainactivityXML:「ツールバー」「Mainコンテンツ」「下部フラグメント」の3層からなる。
contentmainXML:「Mainコンテンツ」の中身。

現状、下部フラグメント内のボタンを押すと「Mainコンテンツ」の中身の情報をbitmapで取得する
処理を記述したいと思っています。
つまり、「contentmainXML」もしくはその中の「LinearLayout」の中身「MainLinear」の
スクリーンショットのbitmapを取得したいです。

現状、下記のKotlinコード

MainActivity

1 fun createBitmapFromView():Bitmap { 2 var rootContent = findViewById<LinearLayout> (R.id.MainLinear); 3 var screenView = rootContent.getRootView(); 4 screenView.setDrawingCacheEnabled(true); 5 var bitmap = Bitmap.createBitmap(screenView.getDrawingCache()); 6 screenView.setDrawingCacheEnabled(false); 7 return bitmap; 8 }

を試してみましたが「Deprecated in Java」の表示が出てうまく動きません。
下記参考サイトの「getScreenShot」関数を参考にしたのですが、何が悪いのかが分からない状態です。

https://www.androhub.com/take-a-screenshot-programmatically-in-android/

上記関数の使用ほうほうが 間違っているのか、別の方法を試した方がいいのかが分からないので
アドバイスを頂けませんでしょうか。

mainactivityXML

1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:orientation="vertical"> 8 9 <androidx.coordinatorlayout.widget.CoordinatorLayout 10 android:layout_width="match_parent" 11 android:layout_height="match_parent" 12 android:layout_above="@+id/SM_bottomFrag" 13 android:layout_marginBottom="0dp" 14 tools:context=".MaintActivity"> 15 16 <com.google.android.material.appbar.AppBarLayout 17 android:id="@+id/app_bar" 18 android:layout_width="match_parent" 19 android:layout_height="wrap_content" 20 android:background="@color/zxing_status_text" 21 android:theme="@style/AppTheme.AppBarOverlay"> 22 //ツールバー 23 <androidx.appcompat.widget.Toolbar 24 android:id="@+id/toolbar" 25 android:layout_width="match_parent" 26 android:layout_height="?attr/actionBarSize" 27 android:background="#008577" 28 app:layout_collapseMode="pin" 29 app:layout_scrollFlags="scroll|enterAlways" 30 app:popupTheme="@style/AppTheme.PopupOverlay" 31 app:title="メイン画面" /> 32 33 </com.google.android.material.appbar.AppBarLayout> 34 //Mainコンテンツ 35 <include layout="@layout/contentmain" /> 36 37 </androidx.coordinatorlayout.widget.CoordinatorLayout> 38  //下部フラグメント 39 <fragment 40 android:id="@+id/SM_bottomFrag" 41 android:name="com.example.myapplication.BottomFragment" 42 android:layout_width="match_parent" 43 android:layout_height="wrap_content" 44 android:layout_alignParentBottom="true" 45 tools:layout="@layout/fragment_bottom" 46 android:layout_weight="1.0"/> 47</RelativeLayout>

contentmainXML

1<?xml version="1.0" encoding="utf-8"?> 2 <androidx.core.widget.NestedScrollView 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:id="@+id/scroll" 7 android:layout_width="match_parent" 8 android:layout_height="match_parent" 9 app:layout_behavior="@string/appbar_scrolling_view_behavior" 10 tools:context=".MainActivity" 11 tools:showIn="@layout/activity_main"> 12 13 <LinearLayout 14 android:id="@+id/MainLinear" 15 android:layout_width="match_parent" 16 android:layout_height="wrap_content" 17 android:orientation="vertical"> 18 //この中にXMLの中身を記述 19 </LinearLayout> 20 </androidx.core.widget.NestedScrollView>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/11/18 19:33

>「Deprecated in Java」の表示が出て どこにどのように出たのでしょうか.
guest

回答1

0

ベストアンサー

ドキュメントには以下の記述がありました.
View.setDrawingCacheEnabled

setDrawingCacheEnabled

APIレベル1で 追加APIレベル28で非推奨

open fun setDrawingCacheEnabled(enabled: Boolean): Unit

非推奨:API 11でのハードウェアアクセラレーションレンダリングの導入により、ビュー描画キャッシュはほとんど廃止されました。ハードウェアアクセラレーションでは、中間キャッシュレイヤーはほとんど不要であり、作成およびレイヤーを更新します。アルファアニメーションなど、キャッシングレイヤーが役立つまれなケースではsetLayerType(int,android.graphics.Paint)、ハードウェアレンダリングでこれを処理します。ビュー階層の一部または個々のビューのソフトウェアレンダリングスナップショットのCanvas場合、Bitmapまたはのいずれかから作成し、ビューandroid.graphics.Pictureを呼び出すことをお勧めしますdraw(android.graphics.Canvas)。ただし、これらのソフトウェアレンダリングの使用は推奨されておらず、次のようなハードウェアのみのレンダリング機能との互換性の問題があります。Config.HARDWAREビットマップ、リアルタイムシャドウ、アウトラインクリッピング。フィードバックレポートまたはユニットテスト用のUIのスクリーンショットについては、PixelCopyAPIをお勧めします。

(翻訳: Google Chrome)

そして, 同じ問題に対処した方の記事がありました.

[Android] view.getDrawingCache()がDeprecatedになったのでPixelCopyでスクリーンキャプチャを撮る

投稿2019/11/18 19:43

編集2019/11/18 20:02
jimbe

総合スコア13204

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

adk

2019/11/19 06:12

ありがとうございます。無事キャプチャを実現できました。 Pixel.copy.Requestの関数は現在使用している実機では使えない関数だったため、 参照サイトのワードをもとに調べ、以下のようなCanvas関数で実現できました。 fun getBitmapFromView(view: View):Bitmap { val Bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); var canvas = Canvas(Bitmap); view.draw(canvas);//ここでviewの情報がbitmapに入る return Bitmap }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問