Created
September 1, 2010 14:22
-
-
Save vvakame/560746 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.InputStream; | |
import roboguice.inject.InjectExtra; | |
import android.app.Activity; | |
import android.content.ContentResolver; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.net.Uri; | |
import android.util.DisplayMetrics; | |
import com.google.inject.Inject; | |
import com.google.inject.Provider; | |
public class BitmapFromUriExtraProvider implements Provider<Bitmap> { | |
@Inject | |
protected Activity act; | |
@InjectExtra("mediaImageUri") | |
protected Uri mediaUri; | |
@Override | |
public Bitmap get() { | |
ContentResolver resolver = act.getContentResolver(); | |
Bitmap bitmap = null; | |
if (mediaUri != null) { | |
try { | |
BitmapFactory.Options options = new BitmapFactory.Options(); | |
options.inJustDecodeBounds = true; | |
InputStream is = resolver.openInputStream(mediaUri); | |
BitmapFactory.decodeStream(is, null, options); | |
DisplayMetrics metrics = new DisplayMetrics(); | |
act.getWindowManager().getDefaultDisplay().getMetrics(metrics); | |
// 端末にあわせるため、幅が広い方を高さ、狭い方を幅とする。後の事は渡した先でやってくれ | |
final int width; | |
final int height; | |
if (options.outWidth < options.outHeight) { | |
width = options.outWidth; | |
height = options.outHeight; | |
} else { | |
width = options.outHeight; | |
height = options.outWidth; | |
} | |
if (metrics.widthPixels * 2 < width | |
|| metrics.heightPixels * 2 < height) { | |
// 端末解像度 〜 端末解像度 * 2 の範囲に収まるサイズにする | |
int scaleW = width / metrics.widthPixels; | |
int scaleH = height / metrics.heightPixels; | |
options.inSampleSize = Math.max(scaleW, scaleH); | |
} | |
is = resolver.openInputStream(mediaUri); | |
options.inJustDecodeBounds = false; | |
// NativeHeapから確保 | |
// https://twitter.com/shoozhoo/statuses/22621375376 | |
BitmapFactory.Options.class.getField("inNativeAlloc") | |
.setBoolean(options, true); | |
bitmap = BitmapFactory.decodeStream(is, null, options); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
return bitmap; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import roboguice.activity.GuiceActivity; | |
import roboguice.inject.InjectView; | |
import android.app.Activity; | |
import android.content.Intent; | |
import android.net.Uri; | |
import android.os.Bundle; | |
import android.view.View; | |
import android.view.View.OnClickListener; | |
import android.widget.ImageButton; | |
public class MainActivity extends GuiceActivity { | |
@SuppressWarnings("unused") | |
private final Activity self = this; | |
private final int REQUEST_PICK_CONTACT = 0; | |
@InjectView(R.id.gallery) | |
ImageButton mButton; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.main); // Injection now!! | |
mButton.setOnClickListener(new OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
Intent intent = new Intent(Intent.ACTION_PICK); | |
intent.setType("image/*"); | |
startActivityForResult(intent, REQUEST_PICK_CONTACT); | |
} | |
}); | |
} | |
protected void onActivityResult(int requestCode, int resultCode, Intent data) { | |
super.onActivityResult(requestCode, resultCode, data); | |
if (requestCode == REQUEST_PICK_CONTACT) { | |
data.setClass(this, DotActivity.class); | |
Uri pictUri = data.getData(); | |
if (pictUri != null) { | |
data.putExtra("mediaImageUri", pictUri); | |
startActivity(data); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import roboguice.activity.GuiceActivity; | |
import roboguice.inject.InjectView; | |
import android.app.Activity; | |
import android.graphics.Bitmap; | |
import android.os.Bundle; | |
import com.google.inject.Inject; | |
public class ReceiveActivity extends GuiceActivity { | |
@SuppressWarnings("unused") | |
private final Activity self = this; | |
// Powered by BitmapFromUriExtraProvider | |
@Inject | |
private Bitmap mBGBitmap; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.dot); // Injection now!! | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment