2011年1月20日木曜日

PCとAndroidの通信(BlueTooth)がわからん

AndroidHackなど読みつつやってみたが。。。

TeraTermにてBlueToothで使用している仮想シリアルポートを指定して通信をはじめるとしっかりデータのやりとりはできている。

しかし.NETFrameworkとC#で作った簡単なシリアル通信プログラムだとなぜかデータが受信しない
1回だけデータを受け取ったことはあるがそれっきり受け取らない・・・
よーわからん!

2011年1月3日月曜日

android.widget.Buttonの座標を設定する方法2

前回absoluteLayoutを使って実装したものを紹介したのですがもっと簡単なやつありました。

void android.view.View.layout(int l, int t, int r, int b)
Viewに対してleft,top,right,bottomを指定できます。
これなら他のLayoutでも可能っぽい。
試しにLinearLayoutで作ってみました。


import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.Button;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;

/**
 * レイアウトの配置の仕方のテスト クリック、タッチ、ロングタッチイベントの呼び出し順序確認
 *
 * @author kuro
 */
public class AndroidFormTest extends Activity implements OnClickListener,
  OnLongClickListener, OnTouchListener {
 private Button button1;
 private int mState = 0;
 private int offsetX = 0;// ボタンクリックしたスクリーンのX座標とボタンのX座標の差分
 private int offsetY = 0;// ボタンクリックしたスクリーンのY座標とボタンのY座標の差分
 private final int STATE_NONE = 0;
 private final int STATE_DRAG = 1;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  //setContentView(R.layout.main);
  LinearLayout linearLayout = new LinearLayout(this);
  setContentView(linearLayout);
  //ボタン作成
  button1 = new Button(this);
  // 各イベントリスナの登録
  button1.setOnClickListener(this);
  button1.setOnLongClickListener(this);
  button1.setOnTouchListener(this);
  linearLayout.addView(button1, new LinearLayout.LayoutParams(150,50));
  button1.setText(button1.getLeft() + "," + button1.getTop());
 }
 @Override
 public void onClick(View v) {
  // TODO 自動生成されたメソッド・スタブ
  button1.setText("onClick");
 }
 @Override
 public boolean onLongClick(View v) {
  // TODO 自動生成されたメソッド・スタブ
  button1.setText("onLongClick");
  return false;
 }
 @Override
 public boolean onTouch(View v, MotionEvent event) {
  // TODO 自動生成されたメソッド・スタブ
  // ドラッグ
  switch (event.getAction() & MotionEvent.ACTION_MASK) {
  case MotionEvent.ACTION_DOWN:
   offsetX = (int) event.getX();
   offsetY = (int) event.getY();
   mState = STATE_DRAG;
   break;
  case MotionEvent.ACTION_UP:
  case MotionEvent.ACTION_POINTER_UP:
   mState = STATE_NONE;
   break;
  case MotionEvent.ACTION_MOVE:
   if (mState == STATE_DRAG) {
    int pointX, pointY;
    pointX = (int) event.getRawX() - offsetX;
    //ステータスバーの取得方法が不明のため直打ち(要変更)
    pointY = (int) event.getRawY() - (offsetY + 50);
    button1.layout(pointX, pointY, pointX + button1.getWidth(), pointY + button1.getHeight());
   }
   break;
  }
  return false;
 }
}