Thứ Sáu, 28 tháng 10, 2016

Animation- Hiệu ứng chuyển trong Android

Vị trí File XML:

res/anim/filename.xml

Resource reference (tên gọi):

In Java: R.anim.filename In XML: @[package:]anim/filename

Thuộc tính chung:

  • android:fillAfter="true" - Giữ trạng thái sau khi chạy (trong <set>)
  • android:fillBefore="true" - Giữ trạng thái trước khi chạy
  • android:duration - Thời gian chạy
  • android:startOffset - Thời gian chờ trước khi chạy
  • android:repeatMode - Chế độ lặp
  • android:repeatCount - Lần lặp
  • infinite - lặp vô hạn
  • android:interpolator - (nội suy) kiểu chạy
    • @android:anim/accelerate_decelerate_interpolator - Tăng tốc, giảm tốc
    • @android:anim/accelerate_interpolator - Tăng tốc
    • @android:anim/anticipate_interpolator - (Biết trước) quay lên vị trí đầu, chạy tiếp
    • @android:anim/anticipate_overshoot_interpolator - (Biết trước_Vượt qua) quay lên vị trí đầu, vượt qua vị trí cuối
    • @android:anim/bounce_interpolator - (nẩy lên) nẩy lên ở vị trí cuối
    • @android:anim/cycle_interpolator - (Vòng tròn) chạy qua lại đầu, cuối
    • @android:anim/decelerate_interpolator - (Giảm tốc) Chậm dần
    • @android:anim/linear_interpolator - (Thẳng) đều đều
    • @android:anim/overshoot_interpolator - (Vượt qua) vượt qua vị trí cuối
    • @android:anim/fade_in
    • @android:anim/fade_out
    • @android:anim/slide_in_left - Chạy từ trái qua
    • @android:anim/slide_out_right - Chạy từ phải rồi mất

Alpha Animation (Độ trong suốt):

[code language="xml"]
 <alpha android:duration="3000" android:fromalpha="0" android:toalpha="1">  
[/code]

Rotate Animation (Độ xoay):

[code language="xml"]
 <rotate android:duration="3000" android:fromdegrees="0" android:pivotx="50%" android:pivoty="50%" android:todegrees="360">  
[/code]

Scale Animation (Độ co dãn):

[code language="xml"]
 <scale android:duration="3000" android:fromxscale="1" android:fromyscale="1" android:pivotx="50%" android:pivoty="50%" android:toxscale="2" android:toyscale="2">  
[/code]

Translate Animation (Độ đi chuyển):

[code language="xml"]
 <translate android:duration="3000" android:fromxdelta="-50%" android:fromydelta="-50%" android:toxdelta="0%" android:toydelta="0%">  
[/code]

Set/Batch Animation (nhiều hiệu ứng):

[code language="xml"]
 <set android:interpolator="@android:anim/slide_out_right" xmlns:android="http://schemas.android.com/apk/res/android">  
 <alpha android:duration="3000" android:fromalpha="0" android:toalpha="1">  
 <rotate android:duration="3000" android:fromdegrees="0" android:pivotx="50%" android:pivoty="50%" android:todegrees="360">  
 <scale android:duration="3000" android:fromxscale="1" android:fromyscale="1" android:pivotx="50%" android:pivoty="50%" android:toxscale="2" android:toyscale="2">  
 <translate android:duration="3000" android:fromxdelta="-50%" android:fromydelta="-50%" android:toxdelta="0%" android:toydelta="0%">  
 </translate></scale></rotate></alpha></set>  
[/code]

Gọi trong Code:

// Load hiệu ứng  
 final Animation amin = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_out);  
 // Sự kiện
amin.setAnimationListener(new Animation.AnimationListener() {  
   @Override  public void onAnimationStart(Animation animation) {  
   }  
   @Override  public void onAnimationEnd(Animation animation) {  
   }  
   @Override  public void onAnimationRepeat(Animation animation) {  
   }  
 });  

 // Chạy hiệu ứng  
 txtMessage.startAnimation(amin);  

Thứ Năm, 27 tháng 10, 2016

Android Animation on View GONE/VISIBLE

If you just want a better transition view on GONE / VISIBLE rather than the default Android show/hide, I came across  some simple trick to make a simple animation using TranslateAnimation class.
*Note: For a better transitioning, you can use animationlistener , and setVisibility onAnimationStart() or onAnimationEnd().
// View to be animate (I use ImageView as example here)
ImageView imageView = (ImageView)findViewById(R.id.imageview);
Below are the methods to set view from VISIBLE to GONE
// To animate view slide out from left to right
public void slideToRight(View view){
TranslateAnimation animate = new TranslateAnimation(0,view.getWidth(),0,0);
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}
// To animate view slide out from right to left
public void slideToLeft(View view){
TranslateAnimation animate = new TranslateAnimation(0,-view.getWidth(),0,0);
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}

// To animate view slide out from top to bottom
public void slideToBottom(View view){
TranslateAnimation animate = new TranslateAnimation(0,0,0,view.getHeight());
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}

// To animate view slide out from bottom to top
public void slideToTop(View view){
TranslateAnimation animate = new TranslateAnimation(0,0,0,-view.getHeight());
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}

Thứ Năm, 13 tháng 10, 2016

Viết chương trình đầu tiên HelloWorld.

Viết chương trình đầu tiên HelloWorld với QT Creator.

Thứ Ba, 11 tháng 10, 2016

How to Download and Install Qt QML

How to Download and Install Qt QML

Detecting and Using LTE Networks in Android 6 Marshmallow

3GPP Long Term Evolution (LTE) là một công nghệ mạng 4G hỗ trợ tốc độ dữ liệu cao hơn đáng kể so với những người được hỗ trợ bởi các mạng 3G hiện tại.
Detect Mạng:
Thiết bị trên mạng LTE của Verizon Wireless thường duy trì một kết nối riêng biệt cho mỗi giọng nói và dữ liệu. Một ứng dụng Android sử dụng quản lý kết nối để giám sát trạng thái của mạng dữ liệu. Tương tự như vậy, Telophony Manager cung cấp các API cho phép các ứng dụng kiểm tra trạng thái của các kết nối bằng giọng nói.
Khi viết các ứng dụng Android giúp bạn sử dụng một tính năng cụ thể, bạn thường thêm <users-feature> element tương ứng với tập tin AndroidManifest.xml của bạn. Ứng dụng tương tác với các tính năng thông thường của điện thoại bao gồm:
                    <uses-feature android:name="android.hardware.telephony"/>
Đặc biệt khi ứng dụng làm việc với LTE yêu cầu phải khai báo:
           <uses-feature android:name="android.hardware.telephony.lte"/>
                   <uses-feature android:name="android.hardware.telephony.ehrpd"/>
Ngoài ra cần khai báo permission:
                   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Sử dụng Connectivity Manager kiểm tra mạng đang hoạt động có kết nối dữ liệu 4G hay không.
// get the type and subtype of the data connection
ConnectivityManager connMgr = 
    (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connMgr.getActiveNetworkInfo();
int dNetType = netInfo.getType();
int dNetSubtype = netInfo.getSubtype();

Voice Connection:
Để xác định mạng hiện đang được sử dụng cho các kết nối bằng giọng nói, chỉ cần yêu cầu các loại mạng từ một instance của đối tượng TelephonyManage:

TelephonyManager telMgr =
                                  (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
int vNetType = telMgr.getNetworkType();
if(vNetType == NETWORK_TYPE_LTE){
// on the LTE voice network
}
Xử lý chuyển tiếp mạng (Handling Network Transitions)
Thiết bị kết nối di chuyển từ cell này sang cell khác sẽ cố gắng để duy trì kết nối mạng. Nó thường sẽ thành công nếu các loại mạng không thay đổi giữa các cell. Tuy nhiên, nếu thiết bị di chuyển vào hoặc ra khỏi vùng phủ sóng 4G, kết nối dữ liệu sẽ được giảm và địa chỉ IP của bạn sẽ thay đổi. Bởi vì điều này có thể xảy ra trong khi một ứng dụng có kết nối dữ liệu hoạt động mở, Android sẽ gửi broadcast 
android.net.ConnectivityManager.CONNECTIVITY_ACTION bất cứ khi nào khi có sự thay đổi mạng. Khi Android gửi một broadcast CONNECTIVITY_ACTION, nó bao gồm thêm dữ liệu: một đối tượng NetworkInfo cho mạng mới. 
private class ConnectivityRcvr extends BroadcastReceiver {
 @Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo netInfo = (NetworkInfo)intent.getParcelableExtra(ConnectivityManager
.EXTRA_NETWORK_INFO);
int netType = netInfo.getType();
int netSubtype = netInfo.getSubtype();
boolean isConnected = netInfo.isConnected();
// ...
}
// ...
}
}

Đăng ký broadcast CONNECTIVITY_ACTION trong phương thức onCreate() (nếu bạn muốn đăng ký từ bên trong mã nguồn của ứng dụng) hoặc đăng ký trong AndroidManifest.xml.
và cần khai báo thêm permission: READ_PHONE_STATE.

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
this.connectivityBroadcastReceiver = new ConnectivityBroadcastReceiver();
this.registerReceiver(this.connectivityBroadcastReceiver, intentFilter);

// hủy đăng ký
this.unregisterReceiver(this.connectivityBroadcastReceiver);

NHỮNG TÍNH NĂNG MỚI TRÊN ANDROID 6 MARSHMALLOW

1. Thiết kế theo ngôn ngữ Matterial Design(Android 5. , Android 6.) và nhân hệ thống ART hoàn thiện hơn.
2. Cải thiện về trải nghiệm người dùng:      
·         Giao diện xoay ngang home screen.
·         Menu ứng dụng: Các ứng dụng được bố trí và cuộn xuống theo chiều dọc, ở phía trên cùng là thanh tìm kiếm và một điểm thú vị nữa là máy sẽ tự động gợi ý cho bạn 4 apps để sử dụng tùy ý theo từng thời điểm mà bạn đang ở.

3. Now on tap:
·         đây là tính năng đáng chú ý nhất trên Android Marshmallow. Khi màn hình ở bất cứ ứng dụng nào(ví dụ trình duyệt web) đang hiển thị thông tin, bạn có thể giữ nút Home và máy bắt đầu quét những thông tin đang được hiển thị trên màn hình, gửi về Google và Google sẽ phản hồi lại cho bạn những thông tin, gợi ý có ích liên quan => việc tích hợp này nâng cao trải nghiệm người dùng lên một tầm cao mới.
·         Quét và phản hồi chỉ với thao tác nhấn giữ phím Home.

4. Thao tác với văn bản
·         Nếu như các phiên bản trước, khi bạn chọn một đoạn văn bản để thao tác, thanh công cụ chứa các nút chức năng như cut, copy, paste nằm ở phía trên cùng thì giờ đây, ở phiên bản 6.0 thanh toolbar đã nằm ở ngay vị trí con trỏ chuột cho một thao tác thân thiện và dễ dàng hơn nhiều.

5. Cải thiện về nền tảng hệ điều hành:
·         Chế độ Doze: giải quyết vấn đề về pin chờ. Khi máy bạn không được sử dụng, chế độ Doze sẽ được kích hoạt và sẽ hoạt động hơi giống như khi bạn bật chế độ Airplane trên điện thoại vậy: không kết nối, không thông báo, không có bất kỳ việc chạy ứng dụng nào diễn ra trong quá trình này để đảm bảo cho máy ở trạng thái tiết kiệm năng lượng tối đa có thể. Chỉ một số thông báo quan trọng như cuộc gọi, báo thức, tin nhắn là có thể hiển thị trong trạng thái Doze này. Cụ thể là:
o   Bỏ qua Wakelocks App
o   Các ứng dụng không được phép truy cập mạng
o   Báo động chậm (sẽ không bao gồm đồng hồ báo thức).
o   Wifi quét không được thực hiện.
o   Đồng bộ SyncAdapter và việc làm JobScheduler hoãn lại cho đến khi cửa sổ tiếp theo được bảo trì tiếp theo.
·         Không sử dụng ở đây không đơn giản là để máy trong tình trạng tắt màn hình mà còn là “không di chuyển” - cảm biến trong máy sẽ đo đạc xem liệu có phải máy đang được để im theo nghĩa đen trong 1 thời gian dài hay không.
·         Bạn chỉ cần cầm điện thoại lên hoặc di chuyển máy từ vị trí đứng yên của nó, máy sẽ tự động trở về trạng thái bình thường, tiếp tục kết nối mạng chậm và nhận thông tin.
·         Nếu thiết bị đang cắm điện, hệ thống vô hiệu hóa truy cập mạng, đình chỉ đồng bộ và việc làm cho các ứng dụng mà họ cho là nhàn rỗi.

6.  Kiểm soát quyền ứng dụng:
·         Kiểm soát chặt chẽ hơn tất cả các ứng dụng hệ thống hay bên thứ 3 đang truy cập những dữ liệu cá nhân nào trên thiết bị của mình.
·         Thay vì phải cùng lúc chấp nhận tất cả các điều khoản từ ứng dụng, người dùng có thể dễ dàng điều chỉnh từng điều khoản chẳng hạn như truy cập vị trí, sử dụng camera.
·         Trước đây các thành phần của hệ thống Android ít khi cho phép người dùng tự do quản lý. Tuy nhiên với cơ chế phân quyền ứng dụng mới, người dùng sẽ có trong tay một công cụ mạnh mẽ để làm chủ thiết bị của mình.

7. Chuẩn hóa cảm biến vân tay
·         Chuẩn hóa chế độ hỗ trợ cảm biến vân tay cho các thiết bị quét vân tay trên thiết bị di động chạy hệ điều hành Android. Tính năng này giúp ích trong việc mở khóa thiết bị di động và Android Pay(sử dụng kết hợp với một số hàm API) trở lên thuận tiện hơn.

8. Android Pay:
·         Hệ thống thanh toán Android Pay sử dụng công nghệ NFC với phương thức chạm để thanh toán nhằm thay thế dịch vụ Google Wallet hiện nay trên di động.

9. Biến thẻ nhớ ngoài thành bộ nhớ trong.

10. Trên thực tế Android 6.0 Marshmallow còn hỗ trợ độ phân giải tối đa lên tới 4K, tiêu biểu là các mẫu smartphone Sony Xperia Z5 Premium. Tại sao vậy? Thực chất những nội dung hiển thị trên màn hình smartphone sẽ vẫn được giữ ở độ phân giải gốc, nhưng Android 6.0 sẽ Upscale những nội dung này lên độ phân giải 4K với độ sắc nét và chi tiết hơn. Được biết đây là 1 tính năng có sẵn trên android 6.0 như một API, nhưng tùy vào nhà sản xuất, phần cứng trên smartphone có hỗ trợ độ phân giải này hay không.

11. USB Type-C là 1 chuẩn USB mới với đầu jack kết nối có thể cắm 2 mặt. Điều này đồng nghĩa, trong tương lai, chúng ta sẽ không cần phân biệt đầu cắm như những cổng USB trước đây. Bên cạnh đó, kích thước đầu kết nối của USB Type-C nhỏ gọn hơn so với Type-A truyền thống.

12. Multi-Window: trong phiên bản Android 6.0 Marshmalow thì GG đã có sẵn tính năng này trong lõi hệ điều hành của mình nhưng họ lại không đưa nó vào bản Build  cho người dùng. Chính vì vậy để bật được nó lên thì chúng ta cần thực hiện vài chỉnh sửa trong file Build.prop của hệ thống. Tìm đến “ro.build.type” rồi chỉnh sửa file đó từ giá trị “user” thành “userdebug”.


CHÚ Ý MỘT SỐ CÀI ĐẶT TRONG LINUX 12.04

1.Lỗi trong XAMPP
Khi chạy lệnh :                                
                          sudo /opt/lampp/lampp start
Gặp lỗi:
                          sudo /opt/lampp/lampp start
cách khắc phục:
                          sudo /etc/init.d/apache2 stop 
sau đó
                          sudo /opt/lampp/lampp start
ok!
0.1:Lệnh Stream-video
streaming video from SBC
rtsp://192.168.0.108:554/live.sdp

2.Cài Linphone

   ./autogen
   sudo apt-get install intltool
   sudo apt-get install libgtk2.0-dev
   sudo apt-get install libglade2-dev
   sudo apt-get install libosip2-dev
   sudo apt-get install libexosip2-dev
   cai speex-1.2rc1
   tai speex-1.2rc1.tar.gz
chay
  ./configure
   make
   sudo make install
   sudo apt-get install libavcodec-dev
   sudo apt-get install libswscale-dev
   sudo apt-get install libsdl1.2-dev
   sudo apt-get install libv4l-dev

   ./configure --disable-strict
    make
    sudo make install

3. Sau khi cài linphone thì thêm lệnh 

     sudo ldconfig

4. Lỗi  error: linux/videodev.h: No such file or directory compilation terminated.

                
     sudo apt-get install libv4l-dev
     cd /usr/include/linux
     sudo ln -s ../libv4l1-videodev.h videodev.h
                    sudo apt-get update --fix-missing

5. Lỗi Unable to lock directory /var/lib/apt/lists/

     sudo rm /var/lib/apt/lists/lock
     sudo rm /var/cache/apt/archives/lock

Chú ý:Để cài lại linphone cần remove một số thư viện như ffmpeg 
cd đến thư mục ffmpeg
sau đó chạy :./configure --enable-gpl --enable-libx264 --enable-nonfree
sau đó : sudo make uninstall

6. Lệnh load thư viện để tạo file make

     pkg-config gtk+-2.0 --cflags --libs

7. Copy vaof smartphone

    adb push [path-to-iwconfig] /sdcard/
    adb shell
    su
    mount -o remount,rw /system
    cp /sdcard/iwconfig /system/xbin/
    mount -o remount,ro /system
    exit
    exit

8. Set PC as router

    modprobe iptable_nat
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A FORWARD -i eth1 -j ACCEPT
    sudo sysctl net.ipv4.ip_forward=1

9. Sửa lỗi không adb shell được

    sudo cp /tmp/android.rules /etc/udev/rules.d/51-android.rules
    sudo chmod 644   /etc/udev/rules.d/51-android.rules
    sudo chown root. /etc/udev/rules.d/51-android.rules
    sudo service udev restart
    sudo killall adb
    Disconnect the USB cable between the phone and the computer.
    Reconnect the phone.

10. Xây dựng gate way 

    sudo nano /etc/sysctl.conf
    xóa bỏ coment để thành 
    net.ipv4.ip_forward=1
    save và chạy
    sudo sysctl -p
    sudo sysctl --system

Dùng 2 câu lệnh:

   sudo iptables -D FOWARD 4

   sudo iptables -D FOWARD 4

   Với 2 câu lệnh trên sẽ xóa bỏ 2 luật REJECT, chính là các luật ngăn cản gói tin từ giao diện 2.4GHz đến 5.8GHz.

11. Xử lý lỗi không compile được gcc: 

/usr/local/bin/ld: this linker was not configured to use sysroots collect2: ld returned 1 exit status

xử lý:
- mở terminal
-cd/etc
-sudo gedit bash.bashrc
-thêm vào cuối file này đoạn code :export PATH="/usr/bin:$PATH"
như vậy là ok!!!

12. Lỗi trên Qtcreator
sudo -s chmod o+w /home/hunght/.config/QtProject/qtcreator/*.xml

13. Lệnh

sudo apt-cache search gcc-4.*-arm-linux-gnueabi$
14. Command  cấp quyền cho đọc dữ liệu từ một số cổng COM 
  sudo adduser hunght dialout

15. Khi gặp lỗi này trên Qt creator
libopencv_core.so.2.3: cannot open shared object file: No such file or directory

cách xử lý là 
bật terminal thực hiện: 
            sudo updatedb && locate libopencv_core.so.2.3
sau đó
      /usr/local/opencv/
then type: sudo ldconfig