2013年3月21日木曜日

別クラスからViewの変更


package com.example.temp;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  new vewChange(this);
 }

}

package com.example.temp;

import android.content.Context;
import android.widget.TextView;

public class vewChange {

 public vewChange(Context context) {
  // TODO Auto-generated constructor stub
  
  TextView tv = (TextView) ((com.example.temp.MainActivity) context).findViewById(R.id.textView1);
  tv.setText("change");
 }

}

別パターン
package com.example.temp;

import android.widget.TextView;

public class vewChange {

 public vewChange(MainActivity mainActivity) {
  // TODO Auto-generated constructor stub
  TextView tv = (TextView) mainActivity.findViewById(R.id.textView1);
  tv.setText("change");
 }
}



2013年3月19日火曜日

日にち計算


  Calendar calendar1 = Calendar.getInstance();
  calendar1.set(2013, 4, 1);//日時1を2013/04/01 に設定
 
  Calendar calendar2 = Calendar.getInstance();
  calendar2.set(2013, 4, 10);
  
  // 2つの日付の差を求める(ミリ秒)
  long difference = calendar2.getTime().getTime() - calendar1.getTime().getTime();
  
  // ミリ秒を変換して表示
  System.out.println("日付の差は" + difference / 1000 / 60 / 60 / 24 + "日です。");





2013年3月15日金曜日

EditTextの入力制限

InputFilter で正規表現を使って入力制限のサンプル

EditText の取得とInputFilter の設定
 EditText ed = (EditText)findViewById(R.id.editWeight);  
 InputFilter[] filters = { new MyFilter() };
 ed.setFilters(filters);

InputFilter
 public class MyFilter implements InputFilter {
   
     @Override
     public CharSequence filter(CharSequence source, int start, int end,
             Spanned dest, int dstart, int dend) {
  
      //入力文字を繋げる
         String destStr = dest.toString();
         String newValue = destStr.substring(0, dstart) + source + destStr.substring(dend);
         
         Log.v("ログ", "destStr::" + dest.toString());
         Log.v("ログ", "newValue::" + newValue);
  
         if (newValue.matches("^\\d{1,3}(\\.\\d|\\.)?$")) {
          //正規表現にマッチしている時に入力可
             return source;
         } else {
             return "";
         }
     }
  
 }

入力可能な値は
三桁までの数値で小数点以下一桁

考察:最後が.で終わってしまった時の処理
フォーカスが去った時に.を削除するか0を追加する。


【参考】正規表現
便利なサイト:http://regexpal.com/


2013年3月13日水曜日

custom view をScrollView に表示

うまくいかない。
修正前のソースコード
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

public class testView extends View {

 public testView(Context context, AttributeSet attrs) {
  super(context);
  setFocusable(true);
  Log.v("testVire", "testVire(Context context");
 }

 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);

  // 通常はグラフィックを描画するコードをここに記述する。
  canvas.drawColor(Color.BLUE);

  Paint paint = new Paint();
  Bitmap bitmap = Bitmap.createBitmap(200, 500, Bitmap.Config.ARGB_8888);
  Canvas bitmapCanvas = new Canvas(bitmap);

  paint.setColor(Color.RED);
  bitmapCanvas.drawColor(Color.BLACK);
  bitmapCanvas.drawCircle(50, 50, 40, paint);
  canvas.drawBitmap(bitmap, 10, 10, null);

  Log.v("testVire", "onDraw");
 }
}




修正後のソースコード
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

public class testView extends View {
 
 public testView(Context context, AttributeSet attrs) {
  super(context);
  setFocusable(true);
  Log.v("testVire", "testVire(Context context");
 }
 
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     setMeasuredDimension(200, 500);
     Log.v("testVire", "onMeasure" + widthMeasureSpec);
 }
 

 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  
  // 通常はグラフィックを描画するコードをここに記述する。
  canvas.drawColor(Color.BLUE);
  
  Paint paint = new Paint();
  Bitmap bitmap = Bitmap.createBitmap(200, 500, Bitmap.Config.ARGB_8888);
  Canvas bitmapCanvas = new Canvas(bitmap);
  
  paint.setColor(Color.RED);
  bitmapCanvas.drawColor(Color.BLACK);
  bitmapCanvas.drawCircle(50, 50, 40, paint);
  canvas.drawBitmap(bitmap, 10, 10, null);
  
  Log.v("testVire", "onDraw");
 }
}

onMeasureメソッドを追加した

なぜか、XMLレイアウト画面でドラッグして追加できなくなった。




2013年3月12日火曜日

ImageViewに画像を作成して表示



ImageView imageView = (ImageView) this.findViewById(R.id.imageView1);

// Bitmapの作成
Bitmap bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
          
// Canvasの作成
Canvas canvas;
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
          
// Paintの作成
Paint paint;
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
paint.setAntiAlias(true);
  
// キャンバスに円を描画する
canvas.drawCircle(100, 100, 10, paint);
canvas.drawText( "67.8", 90, 90, paint);
          
// ImageViewに作成したBitmapをセット
imageView.setImageBitmap(bitmap);

2013年3月11日月曜日

スクロールを一番下に移動:view

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview));
scrollview.post(new Runnable() {
    @Override
    public void run() {
        scrollview.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

文字列操作

任意の文字を切り出す:

//元データ
String str = "ABCDEFG";

//最初から3文字目までを取り出す
str.substring(0,3);//ABC

//2文字目から3文字目までを取り出す
str.substring(1,3);//BC

//3文字目から最後までを取り出す
str.substring(2);//CDEFG