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 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/23 08:49