2016-08-29 24 views
0

を更新していないので、この質問は前に頼まれているが、これは異なっているため、ダウン投票の前に最後までお読みください。AndroidのImageViewのは、コールバック関数から

Iは、Androidの画像を取り込み、次いでImageViewの中に配置されるビットマップとしてその画像を返し、カメラを持っています。返されるイメージは、UVCカメラで何らかの作業を行ったクラスから来て、イメージを返します。したがって、Activityがイメージを取得すると、それはインタフェースに登録されたコールバックを介して取得されます。いずれにしても、ここにコールバックのコードがあります。

@Override 
    public void onCaptureComplete(final Bitmap data) 
    { 
     runOnUiThread(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       nextButton.setVisibility(View.VISIBLE); 
       recaptureButton.setVisibility(View.VISIBLE); 
       imageView.setVisibility(View.VISIBLE); 
       imageView.setImageBitmap(data); 
       imageView.invalidate(); 

       ((View) mUVCCameraView).setVisibility(View.INVISIBLE); 

       faceController.closeCamera(); 

       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       data.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] byteArray = stream.toByteArray(); 
       imageData = byteArray; 
      } 
     }); 
    } 

だから、私はそれが捕捉されたようにそれを設定する画像を取得し、私はその活動の同じインスタンス内の画像を取り戻す場合、そう再捕捉初めて、その後、画像がちょうどその最初の画像を示しています2枚目の画像は撮影されませんでした。私はアプリを最小化し、それを再度開くと、それがクラッシュし、もう存在しないビットマップ画像を参照しようとしている私に語りました。実際のデータは新しい画像のデータですが、更新を拒否するImageViewだけです。

私はAsyncTaskを使ってこれを行い、全く同じ結果を得ました。

@Override 
public void onCaptureComplete(Bitmap data) 
{ 
    new UpdateUI().execute(data); 
} 

public class UpdateUI extends AsyncTask<Bitmap, Void, Bitmap> 
{ 
    @Override 
    protected void onPreExecute() 
    { 

    } 

    @Override 
    protected Bitmap doInBackground(Bitmap... params) 
    { 
     return params[0]; 
    } 

    @Override 
    protected void onPostExecute(Bitmap data) 
    { 
     nextButton.setVisibility(View.VISIBLE); 
     recaptureButton.setVisibility(View.VISIBLE); 
     imageView.setVisibility(View.VISIBLE); 
     imageView.setImageBitmap(data); 
     imageView.invalidate(); 

     ((View) mUVCCameraView).setVisibility(View.INVISIBLE); 

     faceController.closeCamera(); 

     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     data.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byte[] byteArray = stream.toByteArray(); 
     imageData = byteArray; 
    } 
} 

だから、私はフラグメントを使用するために活動を変更してみてください、それが放送受信機を使用して、おそらく動作するかどうかを確認することができます考えていたが、なぜこれが起こっている私にはわかりません。

私はそれは、データがコードのクラス/インタフェース部からの静的インスタンスから来ているが、私はたくさんのことを試してみましたし、それだけで更新されないという顔をしてしなければならないかもしれないと思いました。

は、任意のより多くのコードが必要な場合、私に教えてください。

おかげで、 Wihan

EDIT:imageView.setVisibilityが起こるではなく、ビットマップ画像の変更。

あなたは本当にピカソを見てみる必要があります
+0

私は今、ImageViewの部分のためのフラグメントを利用するために活動を再加工しています。その後、取り込まれた各イメージで古いフラグメントを置き換えますが、ImageViewはまだ更新されません。私のSDKなどでImageViewクラスに問題があると思われます。これは意味をなさないものです。私は、ビットマップをデバッグモードで見ると、画像が異なっているのがわかりますが、ImageViewは最初に取り込まれたものと同じ画像を表示します。 –

答えて

0

Picasso.with(getContext()) 
    .load(URL/URI) (1)  /* Watch below for more details */ 
    .placeholder(R.drawable.ic_nothumb) 
    .resize(120, 120) 
    .into(iv); 

(1)このLink私はこれが起こった理由はわかりません

+0

本当に何をしたいのですか、これはネットワーク経由でイメージを取得するためのものです。カメラでイメージをキャプチャしてImageViewを更新したいのですが... –

0

ローカルストレージからイメージをロードする方法を説明しますが、私はに管理これを回避するには、キャプチャして内部ストレージに保存したイメージをドロワブルに変換します。その後、setImageBitmapの代わりにimageView.setImageDrawableを使用しました。

関連する問題