Tùy chỉnh kích thước hiện thị. Thêm các phần khác vào layout[e3droid]
07/08/2012
FacebookTwitterDeliciousStumbleuponDiggMyspaceLinkedInZingmegovnlinkhay


Bài viết này sẽ hướng dẫn thêm cho các bạn 1 phần tùy chỉnh.
Khi viết game đôi khi ta không cần dùng toàn màn hình mà chỉ dùng 1 phần, các phần còn lại ta làm những thứ khác. ví dụ như hiện thị ảnh, video, text...
Để làm được điều này trong E3droid không khó chút nào cả.
Đầu tiên ta thiết kế layout như sau.
code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
        android:id="@+id/xmllayout_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="2px"
        android:background="#FFF"
        android:layout_gravity="center">
        <com.e3roid.opengl.RenderSurfaceView android:id="@+id/xmllayout_view"
            android:layout_width="240px"
            android:layout_height="240px"/>
    </LinearLayout>
    <TextView android:id="@+id/bottom_textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20sp"
        android:text="@string/app_name"/>
</LinearLayout>
Phần này là phần hiện thị của chúng ta. Fix cao và rộng là 240px
<com.e3roid.opengl.RenderSurfaceView android:id="@+id/xmllayout_view"
android:layout_width="240px"
android:layout_height="240px"/>
Cái này là textview để khi bạn chạm vào vùng hiện thị ta sẽ hiện thị số lần chạm vào vùng hiện thị.
<TextView android:id="@+id/bottom_textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="@string/app_name"/>
Kết quả layout khi chạy chương trình như sau:
Đây là code chương trình. Vì code khá đơn giản nên mình đã comment trong code rồi nên không có gì viết thêm. Các bạn xem code sau.
code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package Bai_15_e3droid.gioi;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import com.e3roid.E3Activity;
import com.e3roid.E3Engine;
import com.e3roid.E3Scene;
import com.e3roid.drawable.Background;
import com.e3roid.drawable.Sprite;
import com.e3roid.drawable.texture.AssetTexture;
import com.e3roid.drawable.texture.Texture;
import com.e3roid.drawable.texture.TiledTexture;
import com.e3roid.opengl.RenderSurfaceView;
public class Bai_15_e3droidActivity extends E3Activity implements OnTouchListener {
    private final static int WIDTH  = 240;
    private final static int HEIGHT = 240;
    private Texture robotTexture;
    private Sprite robot;
    //Khai báo biến textview
    private TextView tv;
    @Override
    protected void onSetContentView() {
        //Ban đầu ta phải sét contentview của chúng ta là layout main
        this.setContentView(R.layout.main);
        //=================================================PHẦN QUAN TRỌNG NHẤT======================================
        //Trong layout main ta có surfaceView muốn tham chiếu đến thì ta find id của nó trong layout main.
        //biến this.surfaceView là gói E3droid cung cấp nên ta không cần khai báo
        this.surfaceView = (RenderSurfaceView)this.findViewById(R.id.xmllayout_view);
        this.surfaceView.setRenderer(this.engine);    //Ta cần sét đây là engine của chúng ta
        surfaceView.setOnTouchListener(this);//Lắng nghe sự kiện khi bạn chạm vào vùng hiện thị này
        //================================================================
===========================================
        this.tv = (TextView)findViewById(R.id.bottom_textview);//Find textview
        this.tv.setBackgroundColor(Color.RED);//Đặt màu nền là màu đỏ
    }
    @Override
    public E3Engine onLoadEngine() {
        E3Engine engine = new E3Engine(this, WIDTH, HEIGHT, E3Engine.RESOLUTION_FIXED_RATIO);
        engine.requestFullScreen();
        engine.requestPortrait();
        return engine;
    }
    @Override
    public E3Scene onLoadScene() {
        E3Scene scene = new E3Scene();
        scene.addEventListener(this);
        int centerX = (getWidth()  - robotTexture.getWidth())  / 2;
        int centerY = (getHeight() - robotTexture.getHeight()) / 2;
        robot = new Sprite(robotTexture, centerX, centerY);
        scene.getTopLayer().add(robot);
        Background background = new Background(
                new TiledTexture("background.png", getWidth(), getHeight(), this));
        scene.getTopLayer().setBackground(background);
        return scene;
    }
    @Override
    public void onLoadResources() {
        robotTexture = new AssetTexture("robot.png", this);
    }
    int dem = 0;
    @Override
    public boolean onSceneTouchEvent(E3Scene scene, MotionEvent motionEvent) {
        if (robot != null) {
            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                // x and y must be adjusted to scene's screen position because
                // MotionEvent's getX()&getY() returns pixel position of the actual device.
                int x = getTouchEventX(scene, motionEvent);
                int y = getTouchEventY(scene, motionEvent);
                // Because x and y can be negative or can be out of the view
                // when using with layout container, x and y values must be checked.
                if (x >= 0 && y >=0 && x <= getWidth() && y <= getHeight()) {
                    x -= robotTexture.getWidth()  / 2;
                    y -= robotTexture.getHeight() / 2;
                    robot.move(x, y);
                }
            }
        }
        return false;
    }
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        //Mỗi lần ta chạm vào vùng hiện thị thì ta tăng số lần chạm lên và hiện thị nó lên bằng biến tv
        if(view.getId() == R.id.xmllayout_view && motionEvent.getAction() == MotionEvent.ACTION_DOWN){
            dem++;
            tv.setText(String.valueOf(dem));
        }
        return false;
    }
}
Sưu tầm