TabIndecator として画像が設定された一連のタブを持つアプリケーションがあります。URL から画像を取得し、その特定のタブに指定されている URL として TabIndecator 画像を設定したいと考えています。そうする方法はありますか?ImageView を取得して TabIndecator として設定できますか?
質問する
666 次
2 に答える
0
URL から画像を取得し、その特定のタブに指定されている URL として TabIndecator 画像を設定したいと考えています。そうする方法はありますか?
直接ではなく、イメージを としてデバイスにダウンロードし、Bitmap
でラップしてBitmapDrawable
、 で設定する必要があります。TabSpect.setIndicator()
ImageView を取得して TabIndecator として設定できますか?
もちろん、TabSpec.setIndicator()
aView
を引数として使用することもできます。
于 2012-08-27T18:39:29.183 に答える
0
このメソッドを使用すると、画像の URL からローカル ビットマップを取得できます。私のコメントはスペイン語ですが、この例が役に立つことを願っています。AsyncTask または同様の (UI スレッドではなく) で必ず実行してください。
private static final int IO_BUFFER_SIZE = 8 * 1024;
private static final int MINIMO_TAM = 10;
public static final int MAXIMO_TAM = 640;
public static Bitmap loadRemoteImage(CharSequence urlImagen) {
if (null == urlImagen) {
return null;
}
Bitmap bm = null;
InputStream is = null;
BufferedInputStream bis = null;
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.addRequestInterceptor(new GzipHttpRequestInterceptor());
httpclient.addResponseInterceptor(new GzipHttpResponseInterceptor());
try {
String urlSinEspacios = urlImagen.toString().replace(" ", "+");
// Hacer la llamada
HttpGet httpget = new HttpGet(urlSinEspacios);
HttpEntity entity = httpclient.execute(httpget).getEntity();
is = entity.getContent();
bis = new BufferedInputStream(is, IO_BUFFER_SIZE);
//Obtener solo el tamaño
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(bis, null, o);
try {
bis.close();
is.close();
} catch (Exception e) {
}
//Calcular mejor escala
int scale = 1;
if (o.outHeight > MAXIMO_TAM || o.outWidth > MAXIMO_TAM) {
scale = (int) Math.pow(2, (int) Math.round(Math.log(MAXIMO_TAM / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));
}
//Descargar el real
entity = httpclient.execute(httpget).getEntity();
is = entity.getContent();
bis = new BufferedInputStream(is, IO_BUFFER_SIZE);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16 * 1024];
options.inSampleSize = scale;
bm = BitmapFactory.decodeStream(bis, null, options);
// Finalizado
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
bm = null;
} finally {
try {
bis.close();
is.close();
// Finalizado
httpclient.getConnectionManager().shutdown();
} catch (Exception e) {
}
}
return bm;
}
次に、BitmapDrawable を使用してこの Bitmap をラップし、次のように使用できます。
tabHost.newTabSpec("TODO").setIndicator("TODO", TODO).setContent(TODO);
于 2012-08-27T18:40:09.243 に答える