2017-06-12 15 views
0

現在、私はカスタムアダプタ/リサイクルビューを使用して画像の下に小さな画像と小さな画像を作成していますが、画像をクリックするたびにメイン画像上に表示されます。imageビットマップをimageViewアダプタに設定する

ガレリーの画像をクリックするたびに、画像のリクエストがあります。クリックした画像のIDを取得し、上に表示する画像を再度読み込みます。

私は非常によく私のソリューションが好きではない、私はクリックした画像のビットマップを取得し、上記のimageViewで表示したい。

私の主な活動では、メイン画像を取得する単純な要求を行い、残りの画像は、すべての画像でリサイクルビューをロードするアクティビティの別の要求にロードしています。ここ

は活動です:

public class PhotosForPlant extends AppCompatActivity implements IResult,PhotosForPlantsAdapter.OnItemClickListener { 

    RecyclerView recyclerView; 
    ArrayList<Photo> photos = new ArrayList<Photo>(); 

    VolleyService mVolleyService; 
    IResult mResultCallback = null; 
    IResult mResultCallback2 = null; 
    final String GETREQUEST = "GETCALL"; 
    PhotosForPlantsAdapter adapter; 
    String token; 

    TextView familyTxt; 
    TextView genreTxt; 
    TextView specieTxt; 
    TextView specieDescription; 
    ImageView plantImg; 


    int familyId; 
    int genreId; 
    String familyName; 
    String genreName; 



    Double lat = null; 
    Double lon = null; 
    Double alt = null; 

    String time = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTheme(R.style.AppTheme); 
     setContentView(R.layout.photos_for_plant); 

     Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);; 
     setSupportActionBar(myToolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

     findViewById(R.id.user_ic2).setVisibility(View.GONE); 

     TextView toolbarText = (TextView) myToolbar.findViewById(R.id.toolbar_title); 
     toolbarText.setText("Dados planta");; 

     familyTxt = (TextView)findViewById(R.id.FamilyName); 
     genreTxt = (TextView)findViewById(R.id.GenreName); 
     specieTxt = (TextView)findViewById(R.id.SpecieName); 
     specieDescription = (TextView)findViewById(R.id.specieDescription); 
     plantImg = (ImageView)findViewById(R.id.plantImage); 

     token = checkForToken(); 

     getAllPhotos(); 
     getSpecificPlant(); 
    } 

    private void getSpecificPlant() { 

     String id = getIntent().getExtras().getString("plantId"); 

     final String URL = "http://109d0157.ngrok.io/plants/" + id; 

     getSpecificVolleyCallback(); 

     mVolleyService = new VolleyService(mResultCallback2,this); 

     mVolleyService.getDataObjectVolley(GETREQUEST,URL,token); 
    } 


    private void getAllPhotos() { 

     String id = getIntent().getExtras().getString("plantId"); 

     final String URL = "http://109d0157.ngrok.io/fotos/" + id + "/plants"; 

     getFotosForPlantVolleyCallback(); 

     mVolleyService = new VolleyService(mResultCallback,this); 

     mVolleyService.getDataVolley(GETREQUEST,URL,token); 

     recyclerView = (RecyclerView)findViewById(R.id.gallery); 
     recyclerView.setHasFixedSize(true); 

     RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),5,GridLayoutManager.VERTICAL, false); 
     recyclerView.setLayoutManager(layoutManager); 
     adapter = new PhotosForPlantsAdapter(getApplicationContext(), photos,this); 
     recyclerView.setAdapter(adapter); 
    } 

    private void getSpecificVolleyCallback() { 
     mResultCallback2 = new IResult() { 
      @Override 
      public void notifySuccess(String requestType, JSONObject response) { 
       try { 
        Log.d("ENTREIAQUI","ENTREI"); 
        String specie = response.getString("specie"); 
        loadImage(specie); 
        familyName = response.getJSONObject("genre").getJSONObject("family").getString("name"); 
        genreName = response.getJSONObject("genre").getString("name"); 
        genreId = response.getJSONObject("genre").getInt("id"); 
        genreTxt.setText(genreName); 
        specieTxt.setText(specie); 
        familyTxt.setText(familyName); 
        specieDescription.setText(response.getString("description")); 
        familyId = response.getJSONObject("genre").getJSONObject("family").getInt("id"); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

      @Override 
      public void notifySuccess(String requestType, JSONArray response) { 
       Log.d("ENTREIAQUI","ENTREI"); 
      } 

      @Override 
      public void notifyError(String requestType, VolleyError error) { 
       Log.d("erro!",error.toString()); 
       Log.d("ENTREIAQUI","ENTREI"); 

      } 
     }; 
    } 

    void getFotosForPlantVolleyCallback(){ 
     mResultCallback = new IResult() { 
      @Override 
      public void notifySuccess(String requestType, JSONObject response) { 
      } 

      @Override 
      public void notifySuccess(String requestType, JSONArray response) { 
       Photo photo; 
       // iterate over the JSONArray response 
       for (int i=0; i < response.length(); i++) { 
        try { 
         JSONObject object = response.getJSONObject(i); // get the individual object from JSONArray 
         Log.d("objeto",object.toString()); 
         int id = Integer.parseInt(object.getString("id")); // get the unique identifier from the object 
         if(lat != null && lon != null && alt != null){ 
          lat = Double.parseDouble(object.getString("lat")); 
          lon = Double.parseDouble(object.getString("lon")); 
          alt = Double.parseDouble(object.getString("altitude")); 
         } 
         time = object.getString("date"); 
         String path = object.getString("image"); 
         photo = new Photo(path,id,lat,lon,alt,time); // construct the object 
         photos.add(photo); // add the object to the arraylist so it can be used on the cardLayout 


        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
       adapter.notifyDataSetChanged(); 
      } 

      @Override 
      public void notifyError(String requestType, VolleyError error) { 
       Log.d("resposta",error.toString()); 
      } 
     }; 
    } 

    public void genrePressed(View view){ 
     Intent i = new Intent(this,SpecieLibrary.class); 
     i.putExtra("id",String.valueOf(genreId)); 
     i.putExtra("name",String.valueOf(genreName)); 
     startActivity(i); 
    } 

    public void familyPressed(View view){ 
     Intent i = new Intent(this,GenreLibrary.class); 
     i.putExtra("id",String.valueOf(familyId)); 
     i.putExtra("name",String.valueOf(familyName)); 
     startActivity(i); 
    } 

    @Override 
    public void notifySuccess(String requestType, JSONObject response) { 

    } 

    @Override 
    public void notifySuccess(String requestType, JSONArray response) { 

    } 

    @Override 
    public void notifyError(String requestType, VolleyError error) { 

    } 

    public String checkForToken() { 
     SharedPreferences sharedPref = getSharedPreferences("user", MODE_PRIVATE); 
     String tokenKey = getResources().getString(R.string.token); 
     String token = sharedPref.getString(getString(R.string.token), tokenKey); // take the token 
     return token; 
    } 

    public void loadImage(String specie){ 
     String url = "http://109d0157.ngrok.io/images/" + specie + "/Thumbnail.jpg"; 
     Picasso.with(PhotosForPlant.this) 
       .load(url) 
       .into(plantImg); 
    } 

    @Override 
    public void onRowClick(int position, int id,String path, View view) { 
     String url = "http://109d0157.ngrok.io/" + path; 

     Picasso.with(PhotosForPlant.this) 
       .load(url) 
       .into(plantImg); 
    } 
} 

loadImage、私はメインイメージをロードしてから、私はonRowClickを持っているところである私のカスタムアダプタから来ている、私はそこにクリックされた行のパスを取得そして私は再びそれをロードしますが、私が必要とするのは、そこにビットマップとsetImageResourceをplantImgに何とか取得することです。ここで

は私のアダプタです:

public class PhotosForPlantsAdapter extends RecyclerView.Adapter<PhotosForPlantsAdapter.ViewHolder> { 
    private ArrayList<Photo> photos; 
    private Context context; 


    private OnItemClickListener listener; 

    public interface OnItemClickListener { 
     void onRowClick(int position,int id,String path, View view); 

    } 

    public PhotosForPlantsAdapter(Context context, ArrayList<Photo> photos,OnItemClickListener listener) { 
     this.photos = photos; 
     this.context = context; 
     this.listener = listener; 
    } 

    @Override 
    public PhotosForPlantsAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.photos_for_plant_row, viewGroup, false); 
     return new ViewHolder(view); 
    } 


    @Override 
    public void onBindViewHolder(final PhotosForPlantsAdapter.ViewHolder viewHolder, final int i) { 

     String urlFoto = photos.get(i).getPath(); 
     String url = "http://109d0157.ngrok.io/" + urlFoto; 

     viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP); 

     Picasso.with(context) 
       .load(url) 
       .resize(240, 120) 
       .centerInside() 
       .into(viewHolder.img); 

     viewHolder.img.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (listener != null) { 
        listener.onRowClick(viewHolder.getAdapterPosition(),photos.get(i).getId(),photos.get(i).getPath(), view); 
       } 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return photos.size(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder{ 
     private ImageView img; 
     public ViewHolder(View view) { 
      super(view); 
      img = (ImageView) view.findViewById(R.id.img); 
     } 
    } 
} 

答えて

0

は、ビットマップ

URL newurl = new URL("http://109d0157.ngrok.io/" + urlFoto); 
mIcon_val=BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); 
viewHolder.img.setImageBitmap(mIcon_val); 

として、このように画像を設定し、このよう

Bitmap imgBitmap = ((BitmapDrawable)image.getDrawable()).getBitmap(); 
の画像を取得しよう
関連する問題