Dialogは一般的に、アクティビティの前に表示される小さなウィンドウを指します。 現在のアクティビティがフォーカスを失ったとき、Dialogはユーザー入力を受け付け、メッセージを表示したり、ユーザー入力を受け付けたりすることができます。Dialogを使用する場合、一般的にはDialogクラスのインスタンスを直接作成する必要はありません。代わりに、AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialogを使用することができますが、最も一般的に使用されるAlertDialogは、次の3つの例のイメージの表示を選択するAlertDialogの使用例です:DrawMapは、JumbleImage、SeeThroughImage。DrawMapが導入されていない、後でオンラインマップを表示するためのインターネットアプリケーションで導入されます。
この例では、ボタンを使ってダイアログを起動し、images.xmlをreslayoutに追加しています。
<?xml version=”1.0 encoding=”utf-8 ?>
<LinearLayout xmlns:android=”http://..com/apk/res/android”
android:orientation=”vertical”
android:background=”@drawable/white”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<com.pstreets.graphics2d.GuidebeeGraphics2DView
android:id=”@+id/graphics2dview”
android:layout_weight=”1″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”/>
<LinearLayout xmlns:android=”http://..com/apk/res/android”
android:layout_width=”wrap_content” android:layout_height=”wrap_content”
android:orientation=”horizontal”
>
<Button android:text=”Images”
android:id=”@+id/btnImages”
android:layout_width=”wrap_content”
android:textColor=”@color/black”
android:checked=”true”
android:layout_height=”wrap_content”>
</Button>
</LinearLayout>
</LinearLayout>
Image.javaの修正
public class Images extends Graphics2DActivity
implements OnClickListener{
private Button btnImages;
private int[] imageDuke;
static final private int IMAGE_DIALOG=1;
int w, h;
int offX, offY;
int alpha = 128;
FontEx font = FontEx.getSystemFont();
int fontSize = 24;
Pen pen = new Pen(Color.RED, 2);
char[] message = "Guidebee".toCharArray();
int widthOfMessage = 0;
private int numlocs = 2;
private int numcells = numlocs * numlocs;
private int[] cells;
int cw, ch;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.images);
graphic2dView = (GuidebeeGraphics2DView)
findViewById(R.id.graphics2dview);
btnImages = (Button) findViewById(R.id.btnImages);
btnImages.setOnClickListener(this);
Bitmap bitmap
= BitmapFactory.decodeResource(getResources(),
R.drawable.duke_skateboard);
imageDuke = new int[bitmap.getHeight()
* bitmap.getWidth()];
bitmap.getPixels(imageDuke, 0, bitmap.getWidth(), 0, 0,
bitmap.getWidth(), bitmap.getHeight());
widthOfMessage = font.charsWidth(message, 0,
message.length, fontSize);
w=bitmap.getWidth();
h=bitmap.getHeight();
offX = (SharedGraphics2DInstance.CANVAS_WIDTH - w) / 2;
offY = (SharedGraphics2DInstance.CANVAS_HEIGHT - h) / 2;
cw = w / numlocs;
ch = h / numlocs;
cells = new int[numcells];
for (int i = 0; i < numcells; i++) {
cells[i] = i;
}
}
private void drawJumbleImage(){
Random rand = new Random();
int ri;
for (int i = 0; i < numcells; i++) {
while ((ri = rand.nextInt(numlocs)) == i) {
}
int tmp = cells[i];
cells[i] = cells[ri];
cells[ri] = tmp;
}
graphics2D.clear(Color.WHITE);
graphics2D.Reset();
int dx, dy;
for (int x = 0; x < numlocs; x++) {
int sx = x * cw;
for (int y = 0; y < numlocs; y++) {
int sy = y * ch;
int cell = cells[x * numlocs + y];
dx = (cell / numlocs) * cw;
dy = (cell % numlocs) * ch;
graphics2D.drawImage(imageDuke, w, h,
dx + offX, dy + offY,
sx, sy, cw, ch);
}
}
graphic2dView.refreshCanvas();
}
private void drawSeeThroughImage(){
alpha += 16;
if(alpha>255) alpha=0;
graphics2D.clear(Color.WHITE);
graphics2D.Reset();
graphics2D.setDefaultPen(pen);
graphics2D.drawChars(font, fontSize, message,
0, message.length, offX
+ (w - widthOfMessage) / 2, offY + h / 2);
graphics2D.drawImage(imageDuke, w, h,
offX, offY,
0xFFFF00FF, alpha);
graphic2dView.refreshCanvas();
}
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch(id) {
case IMAGE_DIALOG:
final CharSequence[] items = {"DrawMap",
"JumbleImage","SeeThroughImage"};
AlertDialog.Builder builder
= new AlertDialog.Builder(this);
builder.setTitle("Images");
builder.setSingleChoiceItems(items,
-1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int item) {
switch(item){
case 0:
break;
case 1:
drawJumbleImage();
break;
case 2:
drawSeeThroughImage();
break;
}
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
dialog=alert;
break;
default:
dialog = null;
}
return dialog;
}
@Override
protected void drawImage() {
drawJumbleImage();
}
@Override
public void onClick(View view) {
showDialog(IMAGE_DIALOG);
}
}