Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Đang ở
    89 Tam Trinh - Hoàng Mai - Hà Nội
    Bài viết
    0

    di chuyển view với tọa độ vừa nhận vào chính giữa màn hình - Cờ cảo

    Chào các bác,
    Tình hình là em đang làm một niên luận Caro Online, và em chọn View để vẽ bằng canvas...(do mới tiếp xúc với android và khả năng ngoại ngữ kém, nên có thể không hiểu đúng). và em cần hiển thị địa chỉ người chơi 1 vừa đánh sang người chơi 2 (ở giữa màn hình). Nhưng em kô biết làm cách nào. Mong các bác chỉ giúp. Mã nguồn của e ạ!
    gameview.xml
    Mã:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        >
        <ScrollView android:id="@+id/ScrollView02" 
                android:layout_width="wrap_content" 
                android:layout_height="325dp"
                xmlns:android="http://schemas.android.com/apk/res/android">
    				<HorizontalScrollView android:id="@+id/HorizontalScrollView01" 
                          android:layout_width="wrap_content" 
                          android:layout_height="wrap_content">
    			    	    <RelativeLayout
    			    	         android:layout_width="1650dp"
    			    			 android:layout_height="1700dp"
    			    			 android:id="@+id/main_gameview"
    			    	    ></RelativeLayout>
            		</HorizontalScrollView>
        </ScrollView>
    	<LinearLayout 
    	    android:layout_marginTop="325dp" 
    	    android:layout_width="fill_parent" 
    	    android:layout_height="50dp" 
    	    android:orientation="horizontal"
    	    android:layout_gravity="center_vertical"
    	    >
        <Button
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Thoat"
            android:id="@+id/quit_game" 
            />
        <Button
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Xin hoa"
            android:id="@+id/hoa" 
            />
        <Button
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Xin thua"
            android:id="@+id/thua"
            
            />
        </LinearLayout>
    </RelativeLayout>
    GameView.java
    Mã:
    package com.example.app3;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.ArrayList;
    import java.util.List;
    
    import android.R.color;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.DialogInterface.OnClickListener;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.graphics.Picture;
    import android.graphics.RectF;
    import android.location.Location;
    import android.os.Bundle;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.RelativeLayout;
    import android.widget.Toast;
    import android.util.AttributeSet;
    import android.view.DragEvent;
    import android.view.KeyEvent;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnDragListener;
    import android.view.View.OnKeyListener;
    import android.view.View.OnTouchListener;
    
    public class GameView extends Activity {
       // DrawView drawView;
    	private Socket client;
    	 private PrintWriter printwriter;
    	int WIN=0;
        int State=1;
        int FINAL=0;
        float xx,yy;
        int curr_x,curr_y;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.gameview);
            Button Quit = (Button)findViewById(R.id.quit_game);
    		Button Thua = (Button)findViewById(R.id.thua);
    		Quit.setOnTouchListener(new OnTouchListener() {
    			
    			@Override
    			public boolean onTouch(View arg0, MotionEvent arg1) {
    				// TODO Auto-generated method stub
    				Thread th = new Thread(){
    					public void run(){
    						finish();
    					}
    				};
    			th.start();
    				return false;
    			}
    		});
    		Thua.setOnTouchListener(new OnTouchListener() {
    			
    			@Override
    			public boolean onTouch(View v, MotionEvent event) {
    				// TODO Auto-generated method stub
    				Button Z = (Button)findViewById(R.id.hoa);
    				 Z.setText("YOU LOSE");
    				 Thread room = new Thread(){
    						public void run(){
    							try {
    								sleep(5000);
    							} catch (InterruptedException e1) {
    								// TODO Auto-generated catch block
    								e1.printStackTrace();
    							}
    							finish();
    						}
    					};
    				room.start();
    				return false;
    			}
    		});
            final DrawView obj = new DrawView(this);
            RelativeLayout layout = (RelativeLayout) findViewById(R.id.main_gameview);
            layout.addView(obj,1275,1275);
            
            layout.setOnTouchListener(new OnTouchListener() {
    			@Override
    			public boolean onTouch(View v, MotionEvent event) {
    				// TODO Auto-generated method stub
    				//System.out.println(event.getX()+" "+event.getY());
    				if (event.getAction()==MotionEvent.ACTION_MOVE){
    					xx = event.getX();
    					yy = event.getY();
    					return true;
    				}
    				if (event.getAction()==MotionEvent.ACTION_UP){
    					if (event.getX()-xx<1 && event.getY()-yy<1){
    						int x = (Math.round(event.getX())/25)*25;
    						int y = (Math.round(event.getY())/25)*25;
    						if ((obj.canCheck(x,y)==true && WIN==0)){
    							//if (FINAL==0){
    							obj.check(x, y, State);
    							obj.requestLayout();
    							 if (obj.win(x/25,y/25,State)==true){
    								    //Toast.makeText(null, "You WIN", Toast.LENGTH_LONG);
    								 Button Z = (Button)findViewById(R.id.hoa);
    								 obj.setEnabled(false);
    								 if (State==1)
    									 Z.setText("YOU WIN");
    								 else
    								 Z.setText("YOU LOSE");
    								 WIN=State;
    								 obj.showLineWin();
    								 Thread room = new Thread(){
    										public void run(){
    											try {
    												sleep(5000);
    											} catch (InterruptedException e1) {
    												// TODO Auto-generated catch block
    												e1.printStackTrace();
    											}
    											finish();
    										}
    									};
    								room.start();
    							 }
    							//X.setText(x/25+"");
    							//Y.setText(y/25+"");
    							 try {
    							     client = new Socket("192.168.2.1", 9999);  //connect to server
    							     printwriter = new PrintWriter(client.getOutputStream(),true);
    							     printwriter.write(x/25+","+y/25);  //write the message to output stream
    							     printwriter.flush();
    							     printwriter.close();
    							     client.close();   //closing the connection
    							 
    							    } catch (UnknownHostException e) {
    							     e.printStackTrace();
    							    } catch (IOException e) {
    							     e.printStackTrace();
    							    }
    							curr_x=x;curr_y=y;
    							if (State==1) State=2;
    				    		else State=1;
    							}
    					}
    					return true;
    				}
    				return true;
    			}
    		});
        }
        protected void onDestroy()
        {
          super.onDestroy();
        }   
    }
    
    
    @SuppressLint("DrawAllocation")
    class DrawView extends View {
    	Paint paint = new Paint();
    	int map[][] = new int[55][55];
    	int x1=-1,y1=-1,x2=-1,y2=-1;
    	int StateWin=0;
    	int cx,cy,cs;
        public DrawView(Context context) {
            super(context);
            setFocusable(true);
            setFocusableInTouchMode(true);
            for (int i=0;i<50;i++)
            	for (int j=0;j<50;j++)
            		map[i][j]=0;
            paint.setColor(Color.RED);
        }
        public void showLineWin(){
        	postInvalidate();
        }
        public void check(int x,int y,int type){
        		map[x/25][y/25]=type;
        		postInvalidate();
        }
        public boolean win(int x,int y,int State){
        	cx=x;cy=y;cs=State;
        	int tx1=x,tx2=x,ty1=y,ty2=y;
        	if (map[x][y]==0) return false;
        	int inc=1;
        	
        	//COL
        	for (int i=1;y-i>=0;i++){
        		if (map[x][y]==map[x][y-i]){
        			inc++;
        			tx1=x;
        			ty1=y-i;
        		}else break;
        	}
        	for (int i=1;y+i<=50;i++){
        		if (map[x][y]==map[x][y+i]){
        			inc++;
        			tx2=x;
        			ty2=y+i;
        		}else break;
        	}
        	if (inc>=5){
        		x1=tx1;x2=tx2;
        		y1=ty1;y2=ty2;
        		StateWin=State;
        		return true;
        	}
        	//END COL
        	tx1=x;tx2=x;ty1=y;ty2=y;
        	//ROW
        	inc=1;
        	for (int i=1;x-i>=0;i++)
        		if (map[x][y]==map[x-i][y]){
        			inc++;
        			tx1=x-i;
        			ty1=y;
        		}else break;
        	for (int i=1;x+i<=50;i++)
        		if (map[x][y]==map[x+i][y]){
        			inc++;
        			tx2=x+i;
        			ty2=y;
        		}else break;
        	if (inc>=5){
        		x1=tx1;x2=tx2;
        		y1=ty1;y2=ty2;
        		StateWin=State;
        		return true;
        	}
        	//END ROW
        	tx1=x;tx2=x;ty1=y;ty2=y;
        	//CHEO 1
        	inc=1;
        	for (int i=1;x-i>=0 && y-i>=0 ;i++)
        		if (map[x][y]==map[x-i][y-i]){
        			inc++;
        			tx1=x-i;
        			ty1=y-i;
        		}else break;
    
        	for (int i=1;x+i<=50 && y+i<=50;i++)
        		if (map[x][y]==map[x+i][y+i]){
        			inc++;
        			tx2=x+i;
        			ty2=y+i;
        		} else break;
    
        	if (inc>=5) {x1=tx1;x2=tx2;
    		y1=ty1;y2=ty2;StateWin=State;return true;}
        	//END CHEO 1
        	tx1=x;tx2=x;ty1=y;ty2=y;
        	//CHEO 2
        	inc=1;
        	for (int i=1;x-i>=0 && y+i<=50;i++)
        		if (map[x][y]==map[x-i][y+i]){
        			inc++;
        			tx1=x-i;
        			ty1=y+i;
        		}else break;
    
        	for (int i=1;x+i<=50 && y-i>=0;i++)
        		if (map[x][y]==map[x+i][y-i]){
        			inc++;
        			tx2=x+i;
        			ty2=y-i;
        		}else break;
    
        	if (inc>=5) {x1=tx1;x2=tx2;
    		y1=ty1;y2=ty2;StateWin=State;return true;}
        	//END CHEO 2
    
        	
        	return false;
        }
        public boolean canCheck(int x,int y){
        	if (map[x/25][y/25]==0)
        		return true;
        	return false;
        }
        @Override
        public void onDraw(Canvas canvas) {
        		paint.setColor(Color.GRAY);
        		paint.setStrokeWidth(0);
        		for (int i=1;i<=51;i++){
        			canvas.drawLine(25*i, 0, 25*i, 1275, paint);
        			canvas.drawLine(0, i*25, 1275, i*25, paint);
        		}
        		for (int i=0;i<=50;i++)
        			for (int j=0;j<=50;j++)
        				if (map[i][j]==1){
        					paint.setColor(Color.GREEN);
        					canvas.drawCircle((float)(i*25.0+12.5), (float)(j*25+12.5),10, paint);
        					paint.setColor(Color.WHITE);
        					canvas.drawCircle((float)(i*25.0+12.5), (float)(j*25+12.5),5 , paint);
        				}
        				else if (map[i][j]==2){
        					paint.setColor(Color.RED);
        					paint.setStrokeWidth(5);
        					canvas.drawLine(i*25+5, j*25+5, i*25+20, j*25+20, paint);
        					canvas.drawLine(i*25+20, j*25+5, i*25+5, j*25+20, paint);
        				}
        		//paint.setStrokeWidth(5);
        		//paint.setColor(Color.GREEN);
        		//canvas.drawLine(0,0,100,100, paint);
        		if (StateWin!=0){
        			paint.setStrokeWidth(3);
        			if (StateWin==1)
        				paint.setColor(Color.GREEN);
        			else
        				paint.setColor(Color.RED);
        			canvas.drawLine((float)(x1*25+12.5),(float)(y1*25+12.5),(float)(x2*25+12.5),(float)(y2*25+12.5), paint);
        			
        		}
        }
    }
    Mong các bác giúp đỡ em...Chân thành cảm ơn các bác.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đại loại như này:

    Mã:
    // Get DisplayMetrics object.        DisplayMetrics metrics = new DisplayMetrics();        mContext.getWindowManager().getDefaultDisplay().getMetrics(metrics);                    params.height = metrics.heightPixels;        params.width = metrics.widthPixels;        // calculator position of view with hight and width of screen.                // and draw view with canvas and position.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •