多分簡単な質問ですが、私はsdcardのフォルダからビットマップ(camerashot)を取得するアクティビティを持っています。アクティビティのカスタムビューは、ビューグループを拡張します。私はビットマップをビューに追加してから、そのビューをビューグループに追加して表示したいと思います。最終的には、このように複数のビューが追加されます。これのベストプラクティスは何ですか?たとえば、まずビットマップを取得するためのアクティビティを取得し、次にviewgroupファイル内でそのビットマップに次のコードをアクセスします。ビットマップをビューに追加してビューグループにビューを追加する方法
bitmap bm = (ActivityName()getContext()).methodToGetBitmap();
ビットマップをビューに追加することができます。このビューはビューグループに追加して表示できます。おかげ
[更新]アクティビティ
public class HorizontalPagerActivity extends Activity {
private static final String TAG = "*********hpActivity";
private Context mContext = this;
File tempFile;
byte [] imageArray;
private Bitmap b = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.hpview);
final ViewGroup viewgroup = (ViewGroup)findViewById(R.id.hpview);
tempFile = new File(Environment.getExternalStorageDirectory().
getAbsolutePath() + "/"+"image.jpeg");
imageArray = new byte[(int)tempFile.length()];
try{
InputStream is = new FileInputStream(tempFile);
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
int i = 0;
while (dis.available() > 0) {
imageArray[i] = dis.readByte();
i++;
}
dis.close();
} catch (Exception e) {
e.printStackTrace();
}
Bitmap bm = BitmapFactory.decodeByteArray(imageArray, 0, imageArray.length);
// Bitmap b = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888);
b = bm.copy(bm.getConfig(), true);
if(b == null){
Log.e(TAG, "b = null");
}else{
Log.e(TAG, "b = not null");
}
Canvas canvas = new Canvas(b);
Log.e(TAG, "canvas created");
View view = new View(this);
Log.e(TAG, "view created");
LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
view.setLayoutParams(lp);
view.draw(canvas);
viewgroup.addView(view);
Log.e(TAG, "view added to viewgroup");
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
viewgroup.postInvalidate();
}
});
Log.e(TAG, " inval called on viewgroup");
Log.e(TAG, "no of chidren = "+viewgroup.getChildCount());
}
}
活動の見解IAのViewGroup。これは親ビューです。アクティビティはビットマップを前処理し、ビューを動的に作成して追加します。 runOnUiThread()を使用して親ビューグループに対してinvalidateを呼び出します。
返信ありがとうございます。私は私のポストを更新しました。これは正しい線に沿ったものですか?ビューにビットマップが表示されません。ありがとう – turtleboy
私には正しいと思われる。 – JoxTraex
ビューグループに動的に追加したすべてのビューは、uiスレッドで無効にする呼び出しの後に自分自身を描画しますか?オーバーライドonDrawのように、私はviewgroupクラスで何もする必要はありませんか? – turtleboy