2016-08-05 10 views
1

私は、HTMLを解析して画像を取得し、ニュースや投稿のリストを作成するアプリケーションを作ろうとしています。アンドロイドアプリにURLの画像を表示していますか?

大きな画像をダウンロードしたときに、画像のサイズをサンプリングするためにビットマップデコードを使用しようとすると、ListClassオブジェクトだけが整数の配列(R.id ...)をサポートするため、画像の表示に問題があります。 )。

私はInputStreamを使用するために調査しましたが、Drawableのみをサポートしています。 Webサイトから自分のリストに画像を表示する方法があるので、アプリの処理速度を低下させる多くのメモリが割り当てられないのですか?

主な活動のためのイメージ;

enter image description here

マイMainActivity。

[![import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.TextView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.FragmentManager; 
import android.widget.FrameLayout; 
import android.widget.Button; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.app.Activity; 
import android.graphics.BitmapFactory; 
import android.graphics.drawable.Drawable; 




public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    ListView list; 
    String\[\] web = { 
      "asd "}; 
    Integer\[\] imageId = { 
      R.drawable.pol}; 

    Handler handler; 
    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     TextView text = (TextView)findViewById(R.id.textView); 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     listClass adapter = new 
       listClass(MainActivity.this, web, imageId); 
     list=(ListView)findViewById(R.id.list); 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       Toast.makeText(MainActivity.this, "You Clicked at " +web\[+ position\], Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

InputStreamクラスを実装しようとしました。

import android.media.Image; 
import java.net.URL; 
import android.graphics.BitmapFactory; 
import java.io.InputStream; 
import android.graphics.drawable.Drawable; 





public class imageHandler { 

    Image picture; 


    public static Drawable LoadImageFromWebOperations(String url) { 
     try { 
      InputStream is = (InputStream) new URL(url).getContent(); 
      Drawable d = Drawable.createFromStream(is, "earthdownload"); 
      return d; 
     } catch (Exception e) { 
      return null; 
     } 
    } 
} 
+0

URLから画像を読み込むにはグライドライブラリを使用してください。http://coderzpassion.com/android-working-glide-image-loader-library/ –

+0

広範囲に対処しているアプリケーションを開発するための画像ダウンロードライブラリネットからイメージをダウンロードするための独自のメカニズムを使用していて、それをlistviewに表示しようとすると、あなたはoutofmemory exceptionを得るでしょう。この例外を避けるためには、キャッシュ機構、ビットマップのサイズ変更、メモリ割り振りを行う必要があります。代わりに、画像ダウンロードライブラリを使います。 – Vishwa

+0

BitmapFactoryは、入力ストリームから非常にうまくデコードし、縮小できます。あなたは自分自身を問題にしました。 – greenapps

答えて

0

アンドロイドユニバーサルイメージ・ローダー

宣言を使用しユニバーサルローダー

<ImageView 
android:id="@id/ivImage" 
android:layout_width="150dp" 
android:layout_height="150dp" 
android:adjustViewBounds="true" 

android:scaleType="fitCenter" /> 

でサイズ変更を参照してください、これはまたyou..orに応じてサイズを修正をお試しください

private ImageLoader imageLoader1; 

DisplayImageOptions 
      options = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .showImageOnLoading(R.drawable.no_image) // resource or drawable 
      .showImageForEmptyUri(R.drawable.no_image) // resource or drawable 
      .showImageOnFail(R.drawable.no_image) 
      .considerExifParams(true) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .build(); 

    imageLoader1.displayImage(yourpath.replace(" ", "%20"), ivImage, options); 

あなたにも及びグライドも Piccasoを使用することができ、キャッシュ内の任意の画像負荷なしで、ここで描画イメージを

imageLoader1 = ImageLoader.getInstance(); 

imageLoader1.init(ImageLoaderConfiguration.createDefault(getActivity())); 

no_imageを作成します。

関連する問題