イーサネット経由でアナログ信号を Android アプリに送信しています。目標は、描画されるいくつかの形状のアルファ チャネルを制御することです。コードは特に四角形に適用されます。両方のチュートリアルが別々に機能するようになりました。通信は信号を受信し、値を画面に出力します。グラフィック 1 は四角形を描画し、タッチ イベントに基づいて画面上で移動します。
それはNullExceptionError
オンラインになりsocket = serverSocket.accept()
ます。これは個別には発生しません。
どの部分がグラフィック チュートリアルの一部で、どの部分がコミュニケーション チュートリアルであるかを示しました。onCreate のようないくつかの部分が組み合わされています。
ありがとう
public class MainActivity extends Activity implements OnTouchListener {
DrawView v;
float x;
float y;
Bitmap pic;
int alpha;
private ServerSocket serverSocket;
Handler updateConversationHandler;
Thread serverThread = null;
public static final int SERVERPORT = 6000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
v.setOnTouchListener(this);
setContentView(v);
updateConversationHandler = new Handler();
this.serverThread = new Thread(new ServerThread());
this.serverThread.start();
}
@Override
protected void onStop() {
super.onStop();
try {
serverSocket.close();
finish();
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
}
//communications tutorial
class ServerThread implements Runnable {
public void run() {
Socket socket = null;
try {
serverSocket = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted() && socket==null) {
try {
socket = serverSocket.accept(); //null exception here
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class CommunicationThread implements Runnable {
private Socket clientSocket;
private BufferedReader input;
public CommunicationThread(Socket clientSocket) {
this.clientSocket = clientSocket;
try {
this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String read = input.readLine();
int value = Integer.parseInt(read);
alpha=value*(255/1023);
//updateConversationHandler.post(new updateUIThread(read));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//end communications tutorial
//graphics tutorial
private void init(){
v = new DrawView(this);
//pic = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
x = 0;
y = 0;
alpha=255;
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
v.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
v.resume();
}
public class DrawView extends SurfaceView implements Runnable{
Thread t = null;
SurfaceHolder holder;
boolean running = false;
public DrawView(Context c){
super(c);
holder = getHolder();
}
public void run() {
while(running){
if(holder.getSurface().isValid()){
Canvas c = holder.lockCanvas();
c.drawARGB(255, 0, 0, 0);
//c.drawBitmap(pic, x-pic.getWidth(), y-pic.getHeight(), null);
Paint myPaint = new Paint();
myPaint.setColor(Color.rgb(255, 255, 255));
myPaint.setAlpha(alpha);
// TODO implement alpha //myPaint.setAlpha(a);
c.drawRect(x-100,y-100,x+100,y+100,myPaint);
holder.unlockCanvasAndPost(c);
}
}
}
public void pause(){
running = false;
while(true){
try{
t.join();
}catch(InterruptedException e){
e.printStackTrace();
}break;
}
t = null;
}
public void resume(){
running = true;
t = new Thread(this);
t.start();
}
}
public boolean onTouch(View v, MotionEvent me) {
x = me.getX();
y = me.getY();
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event){
if((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE) {
if(event.getPointerCount() == 2) {
x = event.getX(0);
y = event.getY(0);
}
}
return true;
}
//end graphics tutorial
}