Menu

3/31/19

Thread trong java



Tính kế thừa trong java

-Là một kĩ thuật mà một đối tượng có thể kế thừa tất cả các thuộc tính và hành vi -phương thức của lớp cha.

-Khi kế thừa lớp cha, ta có thể ghi đè-override hay thêm các phương thức khác.

-Chúng ta sử dụng từ khóa extends của lớp con để có thể kế thừa các thuộc tính của lớp cha trừ các thuộc tính private của lớp cha.

Cú pháp như sau:


class ten_lop_con extends ten_lop_cha  
{  
   //cac phuong thuc va cac truong  
}  


Ví dụ 1, -Kế thừa lớp Thread cha thông qua từ khóa extends, và insert phương thức run()

Tạo nhanh 1 thread kế thừa phương thức cha của lớp Thread, cứ mỗi 1s xuất ra câu xin chào, dủ 10 lần thì ngưng.


-Tạo 1 project mới có tên "DemoThread", tôi thực hiện trên IDE của Eclipse.






-Sau khi có project rồi, ta phải tạo thêm package có tện là DemoThread1.

























-Ta click phải vào package, chọn new class, đặt tên là MyThread1, tick chọn checkbox tạo ra phương thức main().























Kết quả như sau:


package DemoThread1;

public class MyThread1
 
{

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}


Tiếp tục, ta tạo ra một class con (có tên là RunThread) kế thừa lớp Thread (lớp cha -sẵn có).



package DemoThread1;

class RunThread extends Thread
{
 
 click phải ở đây chọn Source-->Override/Implement methods--> run().
 
}

public class MyThread1 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}


Ta được kết quả sau:


package DemoThread1;

class RunThread extends Thread
{

 @Override
 public void run() {
  // TODO Auto-generated method stub
  super.run();
 }
 
 
 
}

public class MyThread1 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}

Ta hãy code chức năng xuất ra câu chào cứ mỗi 1s cho phương thức run() nhé,lưu ý khi dùng 

phương thức Sleep, IDE bắt ta phải thêm khối try/catch để bắt lỗi, click phải vào lỗi màu đỏ,

chọn Surrounds with try/catch. Sau khi code xong ta tiến hành implement vào class MyThread1

tạo 1 class mới có tên là t1, và start nó thôi.




package DemoThread1;

class RunThread extends Thread
{

 @Override
 public void run() 
 {
  for (int i=0;i<10;i++)
  {
   System.out.println("xin chao lan thu "+i);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
 
 
 
}


public class MyThread1 {

 public static void main(String[] args) {
 
  
  RunThread t1=new RunThread();
  
  t1.start();

 }

}

Kết quả hiển thị.



xin chao lan thu 0
xin chao lan thu 1
xin chao lan thu 2
xin chao lan thu 3
xin chao lan thu 4
xin chao lan thu 5
xin chao lan thu 6
xin chao lan thu 7
xin chao lan thu 8
xin chao lan thu 9


Ví dụ 2, implements interface Runnable có sẵn.

click phải vào src ta chọn new package đặt tên là DemoThread2, trong package DemoThread2, 

ta chọn new class, đặt tên là MyThread2.






















Tạo 1 class tên RunThread, thêm từ khóa implements Runnable

trong class, ta click phải và thêm phương thức Run().



























package DemoThread2;

class RunThread implements Runnable{

 @Override
 public void run() {
  // TODO Auto-generated method stub
  
 }
 
}


public class MyThread2 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}

Về phần code tương tự ví dụ 1,

package DemoThread2;

class RunThread implements Runnable{

 @Override
 public void run() {
  for (int i=0;i<10;i++)
  {
   System.out.println("xin chao lan thu "+i);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
 
}


public class MyThread2 {

 public static void main(String[] args) {

  Thread t1= new Thread(new RunThread());
  t1.start();

 }

}

Kết quả khi run.


xin chao lan thu 0
xin chao lan thu 1
xin chao lan thu 2
xin chao lan thu 3
xin chao lan thu 4
xin chao lan thu 5
xin chao lan thu 6
xin chao lan thu 7
xin chao lan thu 8
xin chao lan thu 9

Ví dụ 3, tạo thread trực tiếp từ Runnable

package DemoThread3;

public class MyThread3 
{

 

 public static void main(String[] args)
 
 
 {
  
  
    Thread t1 =new Thread (new Runnable() { public void run() {
     
     for (int i=0;i<10;i++)
  {
   System.out.println("xin chao lan thu "+i);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
     
     
     
    }});
 

  t1.start();
 

    }
 

}

Nguồn tham khảo: Tác giả Chế Công Bình.





3/28/19

Designing a Quake-Resistant Building Starts at the Soil



Thiết kế một toà nhà chống động
đất cần bắt đầu từ việc nghiên cứu
đất.

Designing a quake-resistant building starts at the soil

Tôi là Alex Villareal với bản tin về
công nghệ của chương trình tiếng
Anh đặc biệt của đài VOA.

I'm alex villareal with the voa special english technology report.

Công nhân xây dựng ở các nước đang
phát triển thường không được yêu cầu
phải xây những toà nhà kiên cố.

Builders in developing countries are not required to build strong buildings.

Vì vậy, khi thiên tai xảy ra, sự tàn phá
thường rất lớn.

So, when a disaster strikes, the damange is often widespread.

Tuy Nhật Bản là một trong những
quốc gia phát triển nhất trên thế giới.

Yet, Japan is one of the most developed country in the world.

Vậy nhưng trận động đất kèm theo sóng thần ngày 11
tháng 3 đã phá huỷ hơn 14 nghìn ngôi
nhà.

Still, the march eleventh earth-quake and tsunami waves detroyed more than fourteen thousand buildings.

Brandy Cox là trợ lý giáo sư về kỹ
thuật xây dựng ở Đại học Arkansas.

Brandy Cox is an assistant professor of civil engineering at the University Arkansas.


Ông ấy cũng là chuyên gia về động
đất với một tổ chức có tên gọi là
Geotechnical Extreme Events
Reconnaissance, (khảo sát các sự kiện
địa kĩ thuật cực đại) hay viết tắt là
GEER.


He is also an earthquake expert

Nhóm này nghiên cứu các thảm hoạ
thiên tai lớn.

Giáo sư Cox nói rằng Nhật Bản sở
hữu một trong những hệ thống quy
chuẩn xây dựng tốt nhất trên thế giới.

Tuy vậy, ông cũng cho rằng trận động
đất này quá lớn, là một trong năm
trận động đất lớn nhất được ghi nhận
trong lịch sử.

Vì vậy bất cứ khi nào một trận động
đất lớn xảy ra cũng sẽ mang theo sự
tàn phá.

Trận động đất đo được đạt cấp độ 9.

Ông nói rằng một điều mà nhiều
người không hiểu là quy chuẩn xây
dựng có ý nghĩa trong việc ngăn chặn
thiệt hại về tính mạng trong các trận
động đất.

Điều này không có nghĩa là các toà
nhà không phải chịu những thiệt hại
lớn.

Ông Cox cho biết Nhật đã đầu tư khá
nhiều vào việc nghiên cứu địa chấn
và thiết kế kể từ một trận động đất 7,5
độ xảy ra tại Niigata vào năm 1964.
Cùng năm đó một trận động đất 9,2
độ làm rung chuyển bang Alaska của
Mĩ.


Ông ấy nói rằng hai trận động đất mở
ra hướng nghiên cứu mới về quá trình
hoá lỏng đất.

Hoá lỏng đất là quá trình trong đó độ
cứng của đất bị làm cho yếu đi bởi sự
rung lắc của trận động đất.


Đất bắt đầu chuyển động giống như
chất lỏng

The soil begins to move like liquid


Giáo sư Cox nói rằng bước đầu tiên
để thiết kế một toà nhà có khả năng
chống động đất là nghiên cứu đất.

Professor Cox says the firt-step to designing an earthquake

Sau đó các kỹ sư kết cấu sẽ sử dụng
các thông tin đó và quyết định chi tiết
của công trình, ví dụ như có sử dụng
kết cấu thép hay không?

Bê tông cốt thép có được sử dụng để
xây dựng hay không?

Cấu trúc khung của toà nhà sẽ được
thiết kế như thế nào?

Một đội khảo sát các sự kiện địa kĩ
thuật cực đại sẽ đến Nhật Bản để
kiểm tra sự tàn phá gây ra bởi trận
động đất.

Ông Cox nói rằng họ cũng sẽ tham
gia các nỗ lực tái xây dựng. Họ muốn
đảm bảo rằng trường học, bệnh viện,
sở cảnh sát, trạm cứu hoả và các toà
nhà của chính phủ được tái xây dựng
tốt.

Ông Cox và các thành viên khác của
tổ chức GEER đã đến Haiti sau trận
động đất khủng khiếp năm ngoái, và
đang tiếp tục làm việc với các quan
chức Haiti.

Chương trình tiếng Anh đặc biệt của
đài VOA, tôi là Alex Villareal.

3/27/19

Phần 2-FindViewById và sự kiện onTouchEvent


Trong android, muốn sử dụng các view đã thiết kế trong layout(XML) thì ta phải ánh xạ chúng trong source java.

Đầu tiên, ta hãy khai báo các biến cần ánh xạ, cụ thể là các đối tượng

-scorelabel: hiển thị điểm cho game.
-startlabel: yêu cầu người chơi nhấn vào screen để bắt đầu.
-box: là box catcher
.-orange: bóng màu cam
-pink: bóng màu hồng.
-black: bóng màu đen.




Để khởi tạo vị trí ban đầu cho box ta cần biến boxY. theo trục tọa độ Y.




























Tiếp theo, ta tiến hành ánh xạ đối tượng trong hàm Oncreate sẵn có.


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        scoreLabel=(TextView)findViewById(R.id.scoreLabel);
        startLabel=(TextView)findViewById(R.id.startLabel);
        box=(ImageView)findViewById(R.id.box);
        orange=(ImageView)findViewById(R.id.orange);
        pink=(ImageView)findViewById(R.id.pink);
        black=(ImageView)findViewById(R.id.black);

Ta thiết đặt tọa độ âm ban đầu cho các đối tượng ==> nằm ngoài màn hình screen nhé.


























 Từ sự tính toán đó, ta có:    
    
 orange.setX(-80);       
 orange.setY(-80);       
 pink.setX(-80);       
 pink.setY(-80);       
 black.setX(-130);      
 black.setY(-130);


Tiếp theo, hãy ẩn text Tab to start, và thiết đặt tọa độ Y ban đầu cho Box.   

  startLabel.setVisibility(View.INVISIBLE);  
  boxY=500;

Trong class cha ta xây dựng hàm onTouchEvent để bắt sự kiện click vào màn hình screen, ta cần override lên hàm gốc.(thêm từ khóa @Override trước hàm)

public boolean OnTouchEvent(MotionEvent event) khi hàm báo đỏ chỗ 


MotionEvent ta chỉ việc click vào nó, sau đó nhấn tổ hợp phím ALT+Enter thì IDE sẽ tự insert thêm thư viện cho ta:
import android.view.MotionEvent;


Kết quả xây dựng hàm onTouchEvent


  @Override
    public boolean onTouchEvent(MotionEvent e)
  {
        if(e.getAction()==MotionEvent.ACTION_DOWN){
            if (e.getAction() == MotionEvent.ACTION_DOWN)
            {
                boxY -= 20;
            }
            box.setY(boxY);


        }
      return true;
  }


Kết quả demo ứng dụng phần  2.





3/22/19

Phần 1-Project thực tế (Catch the ball-codingwithsara)


Game Catch the ball xây dựng đối tượng đơn giản gồm 3 quả bóng organge, pink, và black.

-Bắt được orange tăng 10 điểm.
-Bắt được pink tăng 30 điểm.
-Bắt trúng black thì game over.

Ok, lets go!

1. Tạo project, đặt tên và chọn nơi save nhé.



2. Chọn chế độ xem sourcecode android, và vào file activity_main.xml để thiết kế giao diện.


3. Chọn decorations cho Layout.


4. Chọn chế độ apptheme là NoActionBar

















5. Thêm resource object vào Drawable



6. Copy các object vào thư mục drawable.






7. Thiết kế layout

-Chọn hướng layout theo vertical
android:orientation="vertical"

-Thiết kế label score có chiều rộng match_parent, chiều cao là 50dp, paddingleft là 10dp, text là "Score: 300", size 18sp,:gravity="center_vertical"


      <TextView

        android:id="@+id/scoreLabel"
        android:gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="Score: 300"
        android:textSize="18sp"
        android:paddingLeft="10dp" />


Tạo 1 dạng viewgroup (FrameLayout-chứa các view con, view đưa vào sau chồng view trước.), với chiều rộng và chiều cao match_parent.


<FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
   </FrameLayout>

Tiếp tục tạo 1 label có tên "Tab to start", với textsize là 30sp, chiều rộng và cao wrap_content, cách view labelscore 180sp, theo hướng center_horizontial

   <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab to start"
            android:textSize="30sp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="180dp" />

Thêm image view 4 đối tượng:

-Box, có width và height=50dp, hướng center_vertial

        <ImageView
            android:id="@+id/box"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:src="@drawable/box" />

-Tương tự cho black-60dp, organge-25dp và pink-14dp

 <ImageView
            android:id="@+id/black"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:src="@drawable/black" />

        <ImageView

            android:id="@+id/orange"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="@drawable/orange" />

        <ImageView

            android:id="@+id/pink"
            android:layout_width="14dp"
            android:layout_height="14dp"
            android:src="@drawable/pink" />


File layout đã thiết kế xong:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView

        android:id="@+id/scoreLabel"
        android:gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="Score: 300"
        android:textSize="18sp"
        android:paddingLeft="10dp" />

    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/startLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab to start"
            android:textSize="30sp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="180dp" />
        <ImageView
            android:id="@+id/box"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:src="@drawable/box" />
        <ImageView
            android:id="@+id/black"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:src="@drawable/black" />
        <ImageView
            android:id="@+id/orange"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="@drawable/orange" />
        <ImageView
            android:id="@+id/pink"
            android:layout_width="14dp"
            android:layout_height="14dp"
            android:src="@drawable/pink"/>

    </FrameLayout>

</LinearLayout>













3/9/19

Giao diện PS CS6



Thanh công  cụ tool và options trong chương trình

















Làm sao khi 2 thanh này biến mất? Ta vào Windows và lôi nó ra.


























Hai thanh công cụ này có mối quan hệ chặt chẽ. Khi bạn chọn Text trên thanh Tool thì thanh options ta có các tùy chỉnh về size text, font chữ....






















Khi thanh công cụ tool bị mất vài chức năng, hay bị ẩn, bạn có thể Reset bằng cách click chuột phải vào thanh options chọn Reset all tools






















Để mở một file ảnh ta chọn File-->Open, có thể mở cùng lúc nhiều file bằng cách nhấn phím ctrl và chọn nhiều ảnh.


Khái niệm điểm ảnh


điểm ảnh (pixel)

















Điểm ảnh (pixel – viết tắt là px)  là đơn vị nhỏ nhất tạo nên hình ảnh.

Hình trên, 4 điểm ảnh nên chỉ thể hiện được 4 màu sắc chi tiết; trong khi hình vẽ bên phải có tới 16 điểm ảnh giúp thể hiện 16 màu sắc, và làm ảnh chi tiết hơn nhiều.

Trên thực tế số điểm ảnh này được tính ở đơn vị hàng triệu (megapixel / MP). Số lượng điểm ảnh này cũng thường được biểu diễn theo hai chiều rộng (width) và cao (height)  trên đơn vị 1 inch/cm.





Giới thiệu photoshop




Adobe Photoshop (thường được gọi là Photoshop) là một phần mềm chỉnh sửa đồ họa được phát triển và phát hành bởi hãng Adobe Systems ra đời vào năm 1988 trên hệ máy Macintosh

Photoshop được đánh giá là phần mềm dẫn đầu thị trường về sửa ảnh bitmap và được coi là chuẩn cho các ngành liên quan tới chỉnh sửa ảnh. Từ phiên bản Photoshop 7.0 ra đời năm 2002, Photoshop đã làm lên một cuộc cách mạng về ảnh bitmap. Phiên bản mới nhất hiện nay là Adobe Photoshop CC.

Ngoài khả năng chính là chỉnh sửa ảnh cho các ấn phẩm, Photoshop còn được sử dụng trong các hoạt động như thiết kế trang web, thiết kế nhân vật game... gần như là mọi hoạt động liên quan đến ảnh bitmap.


Cấu hình khuyến nghị:

Hệ điều hành Windows
  • Vi xử lý: Intel Pentium 4 hoặc AMD Athlon 64
  • Windows XP SP3 (Service Pack 3) hoặc Windows 7 SP1 (Service Pack 1).
  • Adobe Photoshop CS6 cũng hỗ trợ Windows 8 and Windows 8.1, Windows 10
  • Ram: 1 GB
  • Ổ cứng cài đặt Adobe Photoshop CS6 trống 1G
  • Màn hình hiện thị 1024 x 768 (khuyến nghị 1280 x 800) với 16-bit màu and 512 MB của VRAM