0

TabIndecator として画像が設定された一連のタブを持つアプリケーションがあります。URL から画像を取得し、その特定のタブに指定されている URL として TabIndecator 画像を設定したいと考えています。そうする方法はありますか?ImageView を取得して TabIndecator として設定できますか?

4

2 に答える 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 に答える