blog

Android開発早わかりチュートリアルXVII:ダイアログで画像を表示する

Dialogは一般に、アクティビティの前に表示できる小さなウィンドウを指し、現在のアクティビティはフォーカスを失い、Dialogはユーザー入力を受け付けます。ダイアログを使用する場合、一般的に、ダイア...

Nov 12, 2013 · 10 min. read
シェア

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); 
   
 } 
 
} 

Read next

Splunk、Amazonクラウドで無料SaaSを開始

Splunk はすでに、Amazon Web Services クラウドをベースとした無料のアナリティクス・アズ・ア・サービスの提供を開始しています。スペルも発音もちょっと難しい名前の同社は火曜日、有料のSplunkサービスが正式にAWSクラウドのサービスとして開始されたことを発表しました。

Nov 12, 2013 · 2 min read