質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.47%

  • Java

    16160questions

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

  • Android

    7402questions

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

bitmapを取得しimagebuttonにセットする

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 617
退会済みユーザー

退会済みユーザー

今アンドロイドアプリを作成しています。
ユーザーがプロフィール画像を設定できるようにしたいです。
bitmapを取得しimagebuttonにセットすることをやりたいのですが、やり方がわからなくて困っています。
アクティビティに書くべきなのでしょうか?もしそうならなんて書けば良いのでしょうか?

AsyncTaskActivity.java には

package me.myreco.up;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.net.Uri;
import android.support.v7.widget.AppCompatImageButton;
import android.widget.ImageButton;
import android.widget.ImageView;



public class AsyncTaskTestActivity extends AsyncTask<Uri.Builder, Void, Bitmap>{

    private Bitmap bitmap;



 @Override
    protected Bitmap doInBackground(Uri.Builder... builder){

        // 受け取ったbuilderでインターネット通信する
        // 後で入力する

        ImageView imageView = (ImageView)findViewBy(R.id.imageButton2) ;
        Bitmap bmp = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
        return bitmap;
    }

}

と記載し、

protected Bitmap doInBackground(Uri.Builder... builder){

        // 受け取ったbuilderでインターネット通信する
        // 後で入力する

        ImageView imageView = (ImageView)findViewBy(R.id.imageButton2) ;
        Bitmap bmp = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
        return bitmap;
    }


のところでbitmapを取得するようにしました。
Activityの方では

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.profile_activity);

        FirebaseAnalytics = FirebaseAnalytics.getInstance(this);
        FirebaseAnalytics.logEvent("LoginFragment", null);


        mailEdit = (EditText) findViewById(R.id.editingusername);
        usernametext = (EditText) findViewById(R.id.editingmail);
        passEdit = (EditText) findViewById(R.id.editingpass);
        introductiontext = (EditText) findViewById(R.id.editingintro);
        areatext = (EditText) findViewById(R.id.editingarea);
        birthdaytext = (EditText) findViewById(R.id.editingbirthday);
        sextext = (EditText) findViewById(R.id.editingsex);
        twittertext = (EditText) findViewById(R.id.editingtwitter);
        facebooktext = (EditText) findViewById(R.id.editingfacebook);
        icon = (ImageButton) findViewById(R.id.imageButton2);


        View.OnTouchListener focus_listener = new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.requestFocusFromTouch();
                return false;
            }
        };

        mailEdit.setOnTouchListener(focus_listener);

        passEdit.setOnTouchListener(focus_listener);

        usernametext.setOnTouchListener(focus_listener);

        introductiontext.setOnTouchListener(focus_listener);

        areatext.setOnTouchListener(focus_listener);

        birthdaytext.setOnTouchListener(focus_listener);

        sextext.setOnTouchListener(focus_listener);

        twittertext.setOnTouchListener(focus_listener);

        facebooktext.setOnTouchListener(focus_listener);

        saveButton = (Button) findViewById(R.id.editsave);

        SavePreference savePreference = new SavePreference();
        String aToken = savePreference.load_aToken(getApplicationContext());

        UserInfoApi api = ServiceGenerator.createService(UserInfoApi.class, aToken);
        Call<UserInfo> call = api.getUserInfo();

            call.enqueue(new Callback<UserInfo>() {

                public void onResponse(Call<UserInfo> call, Response<UserInfo> UserInfoResponse) {
                    String email = UserInfoResponse.body().getEmail();
                    Integer id = UserInfoResponse.body().getId();
                    String username = UserInfoResponse.body().getUsername();
                    Object area = UserInfoResponse.body().getArea();
                    String bio = UserInfoResponse.body().getAttribute();
                    String sex = UserInfoResponse.body().getSex();
                    Object birthday = UserInfoResponse.body().getBirthday();
                    String iconurl = (String) UserInfoResponse.body().getIcon();


                    mailEdit.setText(email);

                    passEdit.setText(String.valueOf(id));
                    if (username != null) {
                        usernametext.setText(String.valueOf(username));
                    }
                    if (area != null) {
                        areatext.setText(String.valueOf(area));
                    }
                    if (area != null) {
                        areatext.setText(String.valueOf(area));
                    }
                    if (bio != null) {
                        introductiontext.setText(String.valueOf(bio));
                    }
                    if (sex != null) {
                        sextext.setText(String.valueOf(sex));
                    }
                    if (birthday != null) {
                        birthdaytext.setText(String.valueOf(birthday));
                    }
                    if (iconurl != null) {
                        URL url = null;
                        try {
                            url = new URL(iconurl);
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }
                        InputStream istream = null;
                        try {
                            istream = url.openStream();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        //読み込んだファイルをビットマップに変換
                        Bitmap oBmp = BitmapFactory.decodeStream(istream);
                        //ビットマップをImageButtonに設定
                        bitmap = RadiusImage(bitmap);
                        icon.setImageDrawable(null);
                        icon.setImageBitmap(bitmap);
                        //インプットストリームを閉じる
                        try {
                            istream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        }
                    }

                public void onFailure(Call<UserInfo> call, Throwable t) {
                    new AlertDialog.Builder(getApplicationContext())
                            .setTitle("失敗しました")
                            .setMessage("")
                            .setPositiveButton("OK", null)
                            .show();

                }

               });


    saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
    }



        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.

    public Bitmap RadiusImage(Bitmap bm) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        int size = Math.min(width, height);
        Bitmap clipArea = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(clipArea);
        c.drawRoundRect(new RectF(0, 0, size, size), size, size, new Paint(Paint.ANTI_ALIAS_FLAG));
        Bitmap newImage = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(newImage);
        Paint paint = new Paint();
        canvas.drawBitmap(clipArea, 0, 0, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bm, new Rect(0, 0, size, size), new Rect(0, 0, size, size), paint);
        return bitmap;
    }

}

   と記載しました。  

if (iconurl != null) {
                        URL url = null;
                        try {
                            url = new URL(iconurl);
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        }
                        InputStream istream = null;
                        try {
                            istream = url.openStream();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        //読み込んだファイルをビットマップに変換
                        Bitmap oBmp = BitmapFactory.decodeStream(istream);
                        //ビットマップをImageButtonに設定
                        bitmap = RadiusImage(bitmap);
                        icon.setImageDrawable(null);
                        icon.setImageBitmap(bitmap);
                        //インプットストリームを閉じる
                        try {
                            istream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        }

   のところで該当処理をしています。   お願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

そもそも、コンパイルできていないですよね。
AsyncTaskTestActivityは使っていないので消して良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/25 15:00

    コンパイルできていないとはどういうことですか?Activityの方の
    if (iconurl != null) {
    URL url = null;
    try {
    url = new URL(iconurl);
    } catch (MalformedURLException e) {
    e.printStackTrace();
    }
    InputStream istream = null;
    try {
    istream = url.openStream();
    } catch (IOException e) {
    e.printStackTrace();
    }
    //読み込んだファイルをビットマップに変換
    Bitmap oBmp = BitmapFactory.decodeStream(istream);
    //ビットマップをImageButtonに設定
    bitmap = RadiusImage(bitmap);
    icon.setImageDrawable(null);
    icon.setImageBitmap(bitmap);
    //インプットストリームを閉じる
    try {
    istream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }
    }  にだけ書けば良いということですか?その場合はどのような処理を書けば良いのでしょうか?

    キャンセル

  • 2016/08/25 16:47

    AsyncTaskTestActivityでfindViewByIdは使えないですよね。

    現状は何ができて何ができていないのかを質問に追記してください。

    キャンセル

  • 2016/08/25 21:21

    今ユーザーの情報をサーバーからURL形式で取得してくるところとそれをbitmap形に変換するところまでできました。それを非同期通信を使ってユーザーが自分のカメラロールの情報を反映させ、好きな画像に変更させられるようにしたいです。

    キャンセル

  • 2016/08/25 21:27

    Bitmapをどうしたいんですか、カメラロールに追加したいんですか。
    画像をサーバーからとれているなら非同期通信はいらないですよね?

    キャンセル

  • 2016/08/25 22:05

    サーバーから取得した画像のURLをbitmapに変換したいです。(すみません、まだ変換できてませんでした)そしてそのbitmapをimagebuttonにセットしimagebuttonでユーザーが自分の好きな画像に変更させられるようにしたいです。ツイッターのアイコンみたいな感じです。bitmapの定義の方法とbitmapをimagebuttonにセットする方法が知りたいです。

    キャンセル

  • 2016/08/25 22:12

    oBmpはBitmapになっていないんですか?
    また、ImageButton#setImageBitmapしている箇所は動いていないんですか?

    キャンセル

  • 2016/08/25 23:10

    はい、動いていないです。非同期通信で画像取得するところを書きたいです。

    キャンセル

  • 2016/08/25 23:53

    前コメントの「Bitmap形に変換しているところまでできている」とはなんですか?
    サーバーとの通信ができていないんですか?
    このコードは全く動かないんですか?

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    16160questions

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

  • Android

    7402questions

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