2016-09-06 6 views
0

ハッシュタグを使ってTwitter上の画像を検索し、自分のアプリケーション内に画像を表示するコードを書きました。URLをImageViewに挿入する方法は?

ここに私の構造。私はSearchViewを持っています。ユーザーがSearchViewにテキストを入力すると、Twitter4j QueryはそれをTwitter上で検索します。次に、結果からイメージのURLを解析します。

今質問します。どのようにURLからの画像を表示するには、URLからの画像をimageViewに置くことができますか?

ここに私のコード:

/* Setup Configurationbuilder for Twitter4j API, build a searchquery for search Twitter, 
    search Twitter with the search string from the SearchView 
*/ 
public void searchTweets(String searchString) { 

    //auth. the application by creating new ConfigurationBuilder 
    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setJSONStoreEnabled(true); 
    cb.setOAuthConsumerKey("someSecretStuff"); 
    cb.setOAuthConsumerSecret("someSecretStuff"); 
    cb.setOAuthAccessToken("someSecretStuff"); 
    cb.setOAuthAccessTokenSecret("someSecretStuff"); 

    //start the search by build a new query 
    TwitterFactory tf = new TwitterFactory(cb.build()); 
    final twitter4j.Twitter twitter = tf.getInstance(); 
    final Query query = new Query(searchString); 

    //start a new Thread to evaluate the searchQuery 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       //get the results 
       QueryResult result = twitter.search(query); 
       //for each result print the user and the the messagetext 
       for (Status status : result.getTweets()) { 
        twitter4j.MediaEntity [] media = status.getMediaEntities(); 
        for (twitter4j.MediaEntity m : media) { 
         System.out.println(m.getMediaURL()); 
        } 
       } 
      } catch (TwitterException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

更新

ねえ皆さん、すべてのあなたの答えやヒントについて

おかげで多くのことを。今、私は知っている、どのようにURLから画像を取得するが、私はまだ私のimageViewに表示するための問題があります。私は好き嫌いのためにそれらをスライドさせる写真のスタックを実装したい。だから私はそれぞれのアイテムの内部にrelativeLayoutとimageViewを作成するループを作ります。今私はURLから画像をimageViewに入れようとしましたが、うまくいきませんでした。アプリが起動し、白い画面しか表示されません。ここで

は私のコードです:

//for each picture into the list... 
    for (int i = 0; i < imageUrl.size(); i++) { 

     //set RelativeLayout 
     final RelativeLayout relView = new RelativeLayout(this); 
     //set Params for the RelativeLayout 
     relView.setLayoutParams(new RelativeLayout.LayoutParams((windowWidth - 80), windowHeight - 80)); 
     relView.setX(40); 
     relView.setY(40); 
     relView.setTag(i); 
     //set BackgroundColor RelativeLayout 
     relView.setBackgroundColor(Color.WHITE); 

     String url = imageUrl.get(i); 

     //set ImageView 
     ImageView img = new ImageView(this); 
     Picasso 
       .with(this) 
       .load(url) 
       .resize(600, 200) 
       .centerCrop() 
       .into(img); 
     //set params to RelativLayout 
     img.setLayoutParams(new RelativeLayout.LayoutParams((windowWidth), windowHeight)); 
     //show image 
     relView.addView(img); 

     //create and set like stamp 
     final Button imageLike = new Button(this); 
     imageLike.setLayoutParams(new ActionBar.LayoutParams(100, 50)); 
     imageLike.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_stamp_like)); 
     imageLike.setX(20); 
     imageLike.setY(80); 
     imageLike.setAlpha(alphaValue); 

     relView.addView(imageLike); 

     //create and set dislike stamp 
     final Button imagePass = new Button(this); 
     imagePass.setLayoutParams(new ActionBar.LayoutParams(100, 50)); 
     imagePass.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_stamp_pass)); 
     imagePass.setX((windowWidth - 200)); 
     imagePass.setY(100); 
     imagePass.setRotation(45); 
     imagePass.setAlpha(alphaValue); 

     relView.addView(imagePass); 


     //create touchlistener for slide 
     final int finalI = i; 
     relView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       //get screen coordinates 
       x_cord = (int) event.getRawX(); 
       y_cord = (int) event.getRawY(); 

       //set coordinates to RelativeLayout 
       relView.setX(x_cord - screenCenter + 40); 
       relView.setY(y_cord - 650); 

       switch (event.getAction()) { 
        //if picture slide down, nothing happens 
        case MotionEvent.ACTION_DOWN: 
         break; 
        //if pictures slide to side right, set rotation coordinates 
        //to RelativeLayout, set likes to 2 
        case MotionEvent.ACTION_MOVE: 
         x_cord = (int) event.getRawX(); 
         y_cord = (int) event.getRawY(); 
         relView.setX(x_cord - screenCenter + 40); 
         relView.setY(y_cord - 650); 
         if (x_cord >= screenCenter) { 
          relView.setRotation((float) ((x_cord - screenCenter) * (Math.PI/32))); 
          if (x_cord > (screenCenter + (screenCenter/2))) { 
           imageLike.setAlpha(1); 
           if (x_cord > (windowWidth - (screenCenter/4))) { 
            likes = 2; 
           } else { 
            likes = 0; 
           } 

          } else { 
           likes = 0; 
           imageLike.setAlpha(0); 
          } 
          imagePass.setAlpha(0); 
         } else { 

          //Rotation 
          relView.setRotation((float) ((x_cord - screenCenter) * (Math.PI/32))); 
          if (x_cord < (screenCenter/2)) { 
           imagePass.setAlpha(1); 
           if (x_cord < screenCenter/4) { 
            likes = 1; 
           } else { 
            likes = 0; 
           } 
          } else { 
           likes = 0; 
           imagePass.setAlpha(0); 
          } 
          imageLike.setAlpha(0); 
         } 
         break; 
        //if pictures moved up, picture were dropped to the primary position 
        case MotionEvent.ACTION_UP: 
         x_cord = (int) event.getRawX(); 
         y_cord = (int) event.getRawY(); 

         Log.e("X Point", "" + x_cord + " , Y " + y_cord); 
         imagePass.setAlpha(0); 
         imageLike.setAlpha(0); 

         //if like 0 nothing happens 
         if (likes == 0) { 
          Log.e("Event Status", "Nothing"); 
          relView.setX(40); 
          relView.setY(40); 
          relView.setRotation(0); 
          //if like == 1 destroy RelativeLayout with the picture 
         } else if (likes == 1) { 
          Log.e("Event Status", "Passed"); 
          imgContainer.removeView(relView); 
         } else if (likes == 2) { 
          //check and creat list 
          if (likeImageList == null) { 
           likeImageList = new ArrayList<>(); 
          } 
          //add picture to list 
          LikedImage likedImage = new LikedImage(); 
          likedImage.img = (BitmapFactory.decodeResource(getResources(), imageList[finalI])); 

          //save image as file 
          saveImageToExternalStorage(likedImage.img); 
          likeImageList.add(likedImage); 
          Log.e("Event Status", "Liked"); 
          Log.e("Groeße der Liste", "" + likeImageList.size()); 
          imgContainer.removeView(relView); 
         } 
         break; 
        default: 
         break; 
       } 
       return true; 
      } 
     }); 

     imgContainer.addView(relView); 
    } 
+0

最初にURLから画像をダウンロードする必要があります。その後、画像ビューにのみ設定することができます。 – GrIsHu

答えて

0

あなたがにビットマップを設定するためにImageview.setImageBitmapを使用すると、まず

public static Bitmap loadBitmap(String url) { 
Bitmap bitmap = null; 
InputStream in = null; 
BufferedOutputStream out = null; 

try { 
    in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE); 

    final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); 
    out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE); 
    copy(in, out); 
    out.flush(); 

    final byte[] data = dataStream.toByteArray(); 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    //options.inSampleSize = 1; 

    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options); 
} catch (IOException e) { 
    Log.e(TAG, "Could not load Bitmap from: " + url); 
} finally { 
    closeStream(in); 
    closeStream(out); 
} 

return bitmap; 

}

画像をダウンロードする必要がありますthe ImageView

+0

ねえ、最初の答えと同じ問題。 imageViewに画像がありません – dudi

+0

最初に確認画像がURLから完全にダウンロードされているかどうか –

1

使用ピカソ..

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 
あなたgradelで

compile 'com.squareup.picasso:picasso:2.5.2' 
+0

愚かな質問。私は文脈のために何を置くべきですか?私は、TwitterListからの画像URLをArrayList に保存します。だから各URLのために私はimageViewを作成し、内部に画像を入れたい。ここで私のコード: '//各ピクチャをリストに... for(int i = 0; i dudi

+0

私は試してみました:' Picasso.with(this)).load(imageUrl.get(i))。into(img); 'しかし、画像に画像が表示されません。 – dudi

+0

try画像をサイズ変更するには – Ashish

0

そのシンプルな、あなたはグライドのようlazyload容量で画像ローダーを使用することができます。

最初

をbuild.gradleする依存関係を追加
dependencies { 
    // glide 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
} 

あなたのアクティビティに使用してください:

String imgUrl = "http://yoururl.com"; 

ImageView imageView = (ImageView) view.findViewById(R.id.thumbnail); 

Glide.with(mContext).load(imgUrl) 
       .thumbnail(0.5f) 
       .crossFade() 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .into(imageView); 

グッドラック。

+0

ねえ、以下の答えと同じ問題。私の画像の中に画像がありません。 – dudi

+0

URLを見つけるのに問題があります。しかし、方法は私が説明したことです。 –

関連する問題