bitmapを取得しimagebuttonにセットする
受付中
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,041

退会済みユーザー
今アンドロイドアプリを作成しています。
ユーザーがプロフィール画像を設定できるようにしたいです。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/08/25 15:00
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
現状は何ができて何ができていないのかを質問に追記してください。
2016/08/25 21:21
2016/08/25 21:27
画像をサーバーからとれているなら非同期通信はいらないですよね?
2016/08/25 22:05
2016/08/25 22:12
また、ImageButton#setImageBitmapしている箇所は動いていないんですか?
2016/08/25 23:10
2016/08/25 23:53
サーバーとの通信ができていないんですか?
このコードは全く動かないんですか?