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

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

詳細はこちら
Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

2回答

1058閲覧

android 画像が拡大して表示されない

sekaikan_ozaki

総合スコア65

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

1グッド

1クリップ

投稿2019/10/21 05:50

PCスペック
Windows10 HOME 64bit
メモリ 32GB
プロセッサ Intel Core i7-8700CPU 3.20GHz
Android Studio 3.4.1(最新ver)
デモ用端末(XPERIA OS:7.0 API 24)

お世話になっております

読み込んだ画像を拡大した状態で表示したいのですが,拡大が反映されずに通常の大きさで表示されてしまいます.
なぜうまくいかないのでしょうか??
ちなみに,https://symfoware.blog.fc2.com/blog-entry-2055.htmlのサイトを参考にさせていただいており,matrixを取得し,image.invalidate();する流れをボタンで制御しているので,うまくいってるみたいですが,僕の場合ボタンを用意せずに最初から拡大された画像を表示させていたいです.

うまくいく方法があればご教授いただきたいです.
宜しくお願い致します。

↓該当コード

activity

1 2 3 private ImageView image; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 //画像の読み込み 7 AssetManager assets = getResources().getAssets(); 8 try (InputStream istream = assets.open("image.png")){ 9 imageBitmap = BitmapFactory.decodeStream(istream); 10 11 ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraintLayout);//このアクティビティのconstraintLayoutを読み込む 12 ImageView image = new ImageView(this); 13 image.setScaleType(FIT_CENTER); 14 image.setImageBitmap(imageBitmap); 15 constraintLayout.addView(image); 16 17//参考にしたサイトは以下がボタンで制御されている------------------------- 18 // matrixを取得 19 Matrix m = image.getImageMatrix(); 20 // matrixの値を取得 21 float[] values = new float[9]; 22 m.getValues(values); 23 // Xの拡大率を表示 24 float scale = values[Matrix.MSCALE_X]; 25 setTitle("MSCALE_X:" + Float.toString(scale)); 26 // XYの拡大率を変更 27 values[Matrix.MSCALE_X] *= 1.5f; 28 values[Matrix.MSCALE_Y] *= 1.5f; 29 // XY座標の移動位置を計算 30 calcTrans(values); 31 // 値を再設定 32 m.setValues(values); 33 image.invalidate(); 34//----------------------------------------------------------------- 35 } catch (Exception e) { 36 e.printStackTrace(); 37 } 38 39} 40 41 private void calcTrans(float[] values) { 42 // 画像の描画領域 43 Rect rect = new Rect(); 44 image.getDrawingRect(rect); 45 // 元画像のサイズ 46 int imgWidth = image.getDrawable().getIntrinsicWidth(); 47 int imgHeight = image.getDrawable().getIntrinsicHeight(); 48 Log.d("debug", "imgWidth:"+imgWidth); 49 Log.d("debug", "imgHeight:"+imgHeight); 50 51 // 拡大後の画像幅 52 int imgScaledWidth = Math.round(imgWidth * values[Matrix.MSCALE_X]); 53 Log.d("debug", "values[Matrix.MSCALE_X]:"+values[Matrix.MSCALE_X]); 54 // 拡大後の画像高さ 55 int imgScaledHeight = Math.round(imgHeight * values[Matrix.MSCALE_Y]); 56 // 表示位置中央X座標 - (拡大後の画像幅 / 2)がX移動距離 57 values[Matrix.MTRANS_X] = (rect.width() / 2) - (imgScaledWidth / 2); 58 // 表示位置中央Y座標 - (拡大後の画像高さ / 2)がY移動距離 59 values[Matrix.MTRANS_Y] = (rect.height() / 2) - (imgScaledHeight / 2); 60 }
jun74👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

ImageViewのレイアウトが完了していないためにサイズ(image.getDrawingRect(rect)で取得しているもの)が0になっているのだと思います。レイアウトが完了した時点でMatrixの計算を行うようにしてみてください。

java

1image.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 2 @Override 3 public void onLayoutChange(...) { 4 // Matrixの計算... 5 } 6});

投稿2019/10/21 23:58

kakajika

総合スコア3131

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

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

sekaikan_ozaki

2019/10/23 08:49

ご回答ありがとうございます レイアウトを変更するためのリスナーが存在するのですね,初めて知りました..
guest

0

アニメーションで,アニメーション時間を0秒にセットし,スケーリング係数XとYに対して任意の値を入力したところ,画面が表示された瞬間から画像が拡大して表示されまし.
やりたいことの解決になったので,こちらにかいておきます.
でも,これは邪道なやり方なのかもしれないですね...笑

投稿2019/10/23 08:52

sekaikan_ozaki

総合スコア65

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問