ど素人から毛を生やす。<延>

AndroidでMainActivityの外からassetsの画像をimageView

java > フロントエンジニア、javaを学ぶ 2016年10月28日(最終更新:8年前)

2016年10月28日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。
訓練校の授業の方が、アプリ製作実習の段階になりました。

ということで早速。

 

FrameLayout上にImageViewをadd。
画像はassetsから持ってくる。

MainActivityではないクラスで。

MainActivityではないクラスで。(ここが重要)

 


//MainActivity 

import android.app.*;
import android.os.*;
import android.widget.*;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FrameLayout frameLayout = (FrameLayout)findViewById(R.id.framelayout);
        Image image = new Image(this, frameLayout);
    }
}

取り敢えず、MainActivityの方では好みのレイアウトを設定。
今回は複数の画像を重ねて一つの画像にすることが最終目標なので、FrameLayoutを選択。

重要なのは、画像の表示を行うクラスの引数。
imageView = new ImageView(this);
は、メインアクティビティの中でしかできない
のがミソです。

メインアクティビティの中の「this」は、クラスのコンテキスト(クラスの様々な情報を含むもの)です。
コンテキストすべてを引数として引き渡します。


//Image 

import android.content.*;
import android.content.res.*;
import android.graphics.*;
import android.widget.*;
import java.io.*;

public class Image extends MainActivity {
    ImageView imageView;
    FrameLayout frameLayout;

    Avatar(Context context, FrameLayout fl){
        imageView = new ImageView(context);
        frameLayout = fl;
        AssetManager as = context.getResources().getAssets();
        try {
            InputStream is = as.open("sample2.png");
            Bitmap bm = BitmapFactory.decodeStream(is);
            imageView.setImageBitmap(bm);
            frameLayout.addView(imageView);
        } catch (IOException e) {
        }
    }
}

assetsから画像を読み込む方法については、今回はシンプルなこちらのコードを使用させて貰っています。
アンドロイドアプリ開発TIP★STAR

さきほども書きましたが、今回のミソは、
imageView = new ImageView(this);
が、できない。ここに尽きます。

ついでにいえば、同じ理由で、
AssetManager as = getResources().getAssets();
もできません。

どちらも、参照したいコンテキスト情報がMainActivity内にしか存在しないためです。

そこで、MainActivityからコンテキストを引数として戴きます
これにより、

imageView = new ImageView(context);
AssetManager as = context.getResources().getAssets();

という形で、それぞれ処理することができます。コロンビア。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)