2013年2月20日水曜日

popup menu


コンテキストメニューは大きすぎる。
リストビューで、各セル毎にメニューを出したいときはPopupMenuが便利

/res/menu/cart_menu.xml


<menu xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:id="@+id/menu_del"
        android:title="削除する"
     />
    <item android:id="@+id/menu_up"
        android:title="1個増やす"
     />
    <item android:id="@+id/menu_down"
        android:title="1個減らす"
     />
</menu>

Java


//リストをクリックしたときの処理
listView.setOnItemClickListener(new OnItemClickListener(){    
public void onItemClick(AdapterView<?> parent, View view, 
int position,long id) {

    PopupMenu popup =new PopupMenu(Order.this, view);
popup.getMenuInflater().inflate(R.menu.cart_menu,   popup.getMenu());

popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

@Override
public boolean onMenuItemClick(MenuItem item) {
      switch(item.getItemId()){ case R.id.menu_del:      break; case R.id.menu_up:      break; case R.id.menu_down:      break; } return true;      }
});
 }
});



context menu

画面の真ん中に出るメニュー

/res/menu/cart_menu.xml


<menu xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item android:id="@+id/menu_del"
        android:title="削除する"
     />
    <item android:id="@+id/menu_up"
        android:title="1個増やす"
     />
    <item android:id="@+id/menu_down"
        android:title="1個減らす"
     />
</menu>

java

ボタンなど、メニューを出すViewを設定

registerForContextMenu(listView);

//メニュー選択処理
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_del:
            // 全削除
            break;
        case R.id.menu_up:
            // 個数アップ
            break;
        case R.id.menu_down:
            // 個数ダウン
            break;
        default:
            return super.onContextItemSelected(item);
        }
        return true;
    }
    
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo){
    MenuInflater inf = getMenuInflater();
    inf.inflate(R.menu.cart_menu, menu);
    }


2013年2月15日金曜日

PopUp Window


popup.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="@color/LightSkyBlue">

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
<ImageView
    android:id="@+id/popImg"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:src="@drawable/dark"
    android:layout_margin="10dp"
    />
<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
<TextView
   android:id="@+id/popTitle"
   android:layout_width="500dp"
   android:layout_height="70dp"
   android:text="title"
   android:textSize="30dp"
   android:layout_margin="10dp"
   />
<TextView
   android:id="@+id/popDetail2"
   android:layout_width="400dp"
   android:layout_height="70dp"
   android:text="title"
   android:textSize="16dp"
   android:textColor="@color/red"
   android:layout_margin="10dp"
   />
<TextView
   android:id="@+id/popDetail1"
   android:layout_width="400dp"
   android:layout_height="140dp"
   android:text="title"
   android:textSize="16dp"
   android:layout_margin="10dp"
   />    
</LinearLayout>
</LinearLayout>
<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
<Button
    android:id="@+id/btnPlay"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_marginLeft="150dp"
    android:background="@drawable/btndmy"
    android:textColor="@android:color/white"
    android:textSize="30dp"
    android:text="PLAY" />

<Button
    android:id="@+id/btnCancel"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_marginLeft="50dp"
    android:background="@drawable/btndmy"
    android:textColor="@android:color/white"
    android:textSize="30dp"
    android:text="Cancel" />
</LinearLayout>
</LinearLayout>

java


LayoutInflater layoutInf 
    = (LayoutInflater)getBaseContext()
     .getSystemService(LAYOUT_INFLATER_SERVICE);  
    View popupView = layoutInf.inflate(R.layout.popup, null);  
PopupWindow popupwindow = new PopupWindow(popupView);
popupwindow.setHeight(450);
popupwindow.setWidth(750);
popupwindow.showAtLocation(view, Gravity.CENTER, 0,0);
TextView title =(TextView)popupView.findViewById(R.id.popTitle);
TextView detail1 =(TextView)popupView.findViewById(R.id.popDetail1);
TextView detail2 =(TextView)popupView.findViewById(R.id.popDetail2);
title.setText(Title[id]);
detail1.setText(Detail1[id]);
detail2.setText(Detail2[id]);
ImageView img = (ImageView)popupView.findViewById(R.id.popImg);
int drawableID = getResources().
getIdentifier(ImageFile[id], "drawable", getPackageName());
img.setImageResource(drawableID);

//Cancel Button
Button btnCancel = (Button)popupView.findViewById(R.id.btnCancel);
    btnCancel.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
popupwindow.dismiss();
}});

//Play Button
Button btnPlay = (Button)popupView.findViewById(R.id.btnPlay);
btnPlay.setId(id);
    btnPlay.setOnClickListener(new Button.OnClickListener(){

@Override
public void onClick(View v) {
popupwindow.dismiss();
play(v.getId());
}});



2013年2月13日水曜日

GridViewで横スクロール

GridViewを使って横スクロールできる可変テーブルを作る
GridViewは縦にしか並ばないので、行数を2行に固定し、列数を可変にする。

java


adapter = new HereAdapter(this, R.layout.list, list);  
GridView listView = (GridView)findViewById(R.id.ListView);
listView.setAdapter(adapter);
//GridView を2行に固定するため列数を可変にする
listView.setNumColumns(list.size()/2); //Columns = Total/2
//幅=【セル幅220+spacing20 * Columns)
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(240*(list.size()/2),600);
listView.setLayoutParams(param);

main XML
横スクロールはHorizontalScroolViewを使用


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="20dp">

    <HorizontalScrollView
        android:layout_width="1000dp"
        android:layout_height="match_parent"
         >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:orientation="horizontal"
            >

            <GridView
                android:id="@+id/ListView"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginLeft="0dp"
                android:background="@android:color/white"
                android:numColumns="1" 
                android:horizontalSpacing="20dp"
                android:verticalSpacing="20dp"
                android:layout_marginTop="10dp"
                android:padding="20dp">
            </GridView>
            

        </LinearLayout>
    </HorizontalScrollView>


list XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:background="@color/gray" 
    android:padding="6dip">  
    
        
    <LinearLayout 
        android:orientation="vertical"  
        android:layout_width="0dip" 
        android:layout_weight="1"  
        android:layout_height="fill_parent"
        > 
         
        <ImageView 
            android:id="@+id/img" 
            android:layout_width="200dp"  
            android:layout_height="200dip" 
            android:layout_weight="1"
            android:gravity="center_vertical"  
            android:src="@drawable/ic_launcher"
            />
          
        <TextView 
            android:id="@+id/title"
            android:layout_width="fill_parent"  
            android:layout_height="50dip" 
            
            android:singleLine="true" 
            android:layout_weight="1"
            android:ellipsize="marquee" 
            android:textColor="@android:color/black"/>  

        
    </LinearLayout>  
</LinearLayout> 



2012年9月13日木曜日

フロントカメラを使う

フロントカメラを使おうとしたが、うまくいかない。真っ黒画面。
ネットでも情報が少ない。

結果(変更点)
mCamera = Camera.open(1); //フロントカメラ指定
//params.setFocusMode(Camera.Parameters.FLASH_MODE_AUTO);
//FLASHが使えないのでこれがあるとだめ。
//params.setPictureSize(800,600);
//フロントは640x480が最大なのでこれもカット

あとはビットマップ処理があれば、この解像度を意識しないとだめ。



2012年8月28日火曜日

Out of Memory

Bitmapを使っているときにOut of Memoryエラーが発生
(何回か実行しているうちに、Heapが足りなくなってエラー)

ネットであちこち探しまわったが、結局解決策はない。

  bitmap.recyle();
  bitmap = null;
をやってもだめ。

GCは当てにならないらしい。
System.gc();をやってもだめ。

結局、bitmapのサイズをできるだけ小さくするしかない。
Cameraを使っているなら、PictureSizeを小さくする。
   params.setPictureSize(800,600);
画像ファイルを使うなら、縮小する

   BitmapFactory.Options opts = new BitmapFactory.Options();
   opts.inSampleSize = 2; // サイズ縮小

   Bitmap bitmap = BitmapFactory.decodeFile(file,opts);
ManifestでHeapサイズを大きくする

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
(ただしこれはエラーの発生を遅らせるだけだが)

これ以外、現在打つ手なし。

2012年8月21日火曜日

Bitmapの解放

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@407ed350

bitmap.recycle();を実行したとき、まだ使ってるから解放できない、というエラー

対策:onPauseでまとめて解放する。


@Override
public void onPause()
{
  super.onPause();
  //Bitmap解放
detect1.setImageBitmap(null);
bitmap.recycle();
bitmap = null;
}