2016年7月26日 星期二

Linux mint 安裝 kvm

參考 intel 文章: https://software.intel.com/en-us/android/articles/speeding-up-the-android-emulator-on-intel-architecture 
先安裝 qemu 模擬器及一些工具:
        sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils cpu-checker
再新增群組(kvm 及 libvirtd )增加使用者:
       sudo adduser mint kvm
       sudo adduser mint libvirtd
重開機, 察看是否成功:
       kvm-ok

    

2016年7月15日 星期五

Android 程式,在 SurfaceView 增加 button

在 res/layout 底下定義的 activity_main.xml 是一個很神奇的檔案, 裏面所定義標籤類型是可以創造實體出來的, 對於像是放在 RelativeLayout 標籤裏面的類型,其安排的順序也很重要.例如以下的範例,該 activity 關聯到一個 java package名稱: com.example.mint.recordvideo,主程式名稱是: MainActivity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mint.recordvideo.MainActivity">


<com.example.mint.recordvideo.mySurfaceRecord
    android:id="@+id/myview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<Button
    android:id="@+id/button_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:onClick="stopMyView" />
</RelativeLayout>
該例子會創造(new)出兩個物件實體(instance),一個是自行定義的類型mySurfaceRecord,自行定義的類型(class)務必要給冠上package名稱,否則執行時鐵定出錯!它是繼承自SurfaceView而來,另外一個是Android系統的內建Button類型,java程式透過findViewById(R.id.button_stop)以找到Button的實體(instance).按鍵類型必須放在後面才不會被SurfaceView 擋住看不見,底下是主程式: MainActivity.java:
package com.example.mint.recordvideo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button quitButton = (Button) findViewById(R.id.button_stop);
    quitButton.setText("結束");
  }
  public void stopMyView(View v){
    finish();
  }
}
底下是自行定義的類型:mySurfaceRecord.java,須注意的是自行定義類型mySurfaceRecord的建構式必須要定兩個參 數Context 及 AttributeSet,
否則執行時就會出錯!
package com.example.mint.recordvideo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class mySurfaceRecord extends SurfaceView implements SurfaceHolder.Callback {
      private SurfaceHolder holder;
      private Context ctx;
      public mySurfaceRecord(Context context, AttributeSet attrs) {
         super(context);
         initMyView(context);
      }

      public void initMyView(context){
         ctx = context;           // 保存 context 備用
         holder = getHolder();    // 獲取把柄,備用
         holder.addCallback(this);// 加入 callback
         // ...
      }

      @Override
      public void  surfaceCreated(SurfaceHolder holder){
         // ...
      }

      @Override
      public void surfaceDestroyed(SurfaceHolder holder){
         // ...
      }

      @Override
      public void  surfaceChanged(SurfaceHolder holder, int format, int width, int height){
         // ...
      }

}
最後放上該組態檔 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mint.recordvideo">
        android:required="true" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Android 程式,在 SurfaceView 增加 button

在 res/layout 底下定義的 activity_main.xml 是一個很神奇的檔案, 裏面所定義標籤類型是可以創造實體出來的, 對於像是放在 RelativeLayout 標籤裏面的類型,其安排的順序也很重要.例如以下的範例,該 activity 關聯到一個 java package名稱: com.example.mint.recordvideo,主程式名稱是: MainActivity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mint.recordvideo.MainActivity">


<com.example.mint.recordvideo.mySurfaceRecord
    android:id="@+id/myview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


<Button
    android:id="@+id/button_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:onClick="stopMyView" />
</RelativeLayout>
該例子會創造(new)出兩個物件實體(instance),一個是自行定義的類型mySurfaceRecord,自行定義的類型(class)務必要給冠上package名稱,否則執行時鐵定出錯!它是繼承自SurfaceView而來,另外一個是Android系統的內建Button類型,java程式透過findViewById(R.id.button_stop)以找到Button的實體(instance).按鍵類型必須放在後面才不會被SurfaceView 擋住看不見,底下是主程式: MainActivity.java:
package com.example.mint.recordvideo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button quitButton = (Button) findViewById(R.id.button_stop);
    quitButton.setText("結束");
  }
  public void stopMyView(View v){
    finish();
  }
}
底下是自行定義的類型:mySurfaceRecord.java,須注意的是自行定義類型mySurfaceRecord的建構式必須要定兩個參 數Context 及 AttributeSet,
否則執行時就會出錯!
package com.example.mint.recordvideo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class mySurfaceRecord extends SurfaceView implements SurfaceHolder.Callback    {
      private SurfaceHolder holder;
      private Context ctx;
      public mySurfaceRecord(Context context, AttributeSet attrs) {
         super(context);
         initMyView(context);
      }

      public void initMyView(context){
         ctx = context;           // 保存 context 備用
         holder = getHolder();    // 獲取把柄,備用
         holder.addCallback(this);// 加入 callback
         // ...
      }

      @Override
      public void  surfaceCreated(SurfaceHolder holder){
         // ...
      }

      @Override
      public void surfaceDestroyed(SurfaceHolder holder){
         // ...
      }

      @Override
      public void  surfaceChanged(SurfaceHolder holder, int format, int width, int height){
         // ...
      }

}
最後放上該組態檔 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mint.recordvideo">
        android:required="true" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Android 程式,在 SurfaceView 增加 button

在 res/layout 底下定義的 activity_main.xml 是一個很神奇的檔案, 裏面所定義標籤類型是可以創造實體出來的, 對於像是放在 RelativeLayout 標籤裏面的類型,其安排的順序也很重要.例如以下的範例,該 activity 關聯到一個 java package名稱: com.example.mint.recordvideo,主程式名稱是: MainActivity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mint.recordvideo.MainActivity">


<com.example.mint.recordvideo.mySurfaceRecord
    android:id="@+id/myview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


<Button
    android:id="@+id/button_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:onClick="stopMyView" />
</RelativeLayout>
該例子會創造(new)出兩個物件實體(instance),一個是自行定義的類型mySurfaceRecord,自行定義的類型(class)務必要給冠上package名稱,否則執行時鐵定出錯!它是繼承自SurfaceView而來,另外一個是Android系統的內建Button類型,java程式透過findViewById(R.id.button_stop)以找到Button的實體(instance).按鍵類型必須放在後面才不會被SurfaceView 擋住看不見,底下是主程式: MainActivity.java:
package com.example.mint.recordvideo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button quitButton = (Button) findViewById(R.id.button_stop);
    quitButton.setText("結束");
  }
  public void stopMyView(View v){
    finish();
  }
}
底下是自行定義的類型:mySurfaceRecord.java,須注意的是自行定義類型mySurfaceRecord的建構式必須要定兩個參 數Context 及 AttributeSet,
否則執行時就會出錯!
package com.example.mint.recordvideo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class mySurfaceRecord extends SurfaceView implements SurfaceHolder.Callback    {
      private SurfaceHolder holder;
      private Context ctx;
      public mySurfaceRecord(Context context, AttributeSet attrs) {
         super(context);
         initMyView(context);
      }

      public void initMyView(context){
         ctx = context;           // 保存 context 備用
         holder = getHolder();    // 獲取把柄,備用
         holder.addCallback(this);// 加入 callback
         // ...
      }

      @Override
      public void  surfaceCreated(SurfaceHolder holder){
         // ...
      }

      @Override
      public void surfaceDestroyed(SurfaceHolder holder){
         // ...
      }

      @Override
      public void  surfaceChanged(SurfaceHolder holder, int format, int width, int height){
         // ...
      }

}
最後放上該組態檔 AndroidManifest.xml:
< ?xml version="1.0" encoding="utf-8"? >< manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.mint.recordvideo">
    <uses-feature android:name="android.hardware.camera"        android:required="true" / >

    < application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">
        < activity android:name=".MainActivity" >
            < intent-filter>
                < action android:name="android.intent.action.MAIN" / >

                <category android:name="android.intent.category.LAUNCHER" / >
            < /intent-filter >
        < /activity >
    < /application >
< /manifest >

Android 的在 SurfaceView 增加 button

在 res/layout 底下定義的 activity_main.xml 是一個很神奇的檔案, 裏面所定義標籤類型是可以創造實體出來的, 對於像是放在 RelativeLayout 標籤裏面的類型,其安排的順序也很重要.例如以下的範例,該 activity 關聯到一個 java package名稱: com.example.mint.recordvideo,主程式名稱是: MainActivity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mint.recordvideo.MainActivity">


<com.example.mint.recordvideo.mySurfaceRecord
    android:id="@+id/myview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


<Button
    android:id="@+id/button_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:onClick="stopMyView" />
</RelativeLayout>
該例子會創造(new)出兩個物件實體(instance),一個是自行定義的類型mySurfaceRecord,自行定義的類型(class)務必要給冠上package名稱,否則執行時鐵定出錯!它是繼承自SurfaceView而來,另外一個是Android系統的內建Button類型,java程式透過findViewById(R.id.button_stop)以找到Button的實體(instance).按鍵類型必須放在後面才不會被SurfaceView 擋住看不見,底下是主程式: MainActivity.java:
package com.example.mint.recordvideo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button quitButton = (Button) findViewById(R.id.button_stop);
    quitButton.setText("結束");
  }
  public void stopMyView(View v){
    finish();
  }
}
底下是自行定義的類型:mySurfaceRecord.java,須注意的是自行定義類型mySurfaceRecord的建構式必須要定兩個參 數Context 及 AttributeSet,
否則執行時就會出錯!
package com.example.mint.recordvideo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class mySurfaceRecord extends SurfaceView implements SurfaceHolder.Callback    {
      private SurfaceHolder holder;
      private Context ctx;
      public mySurfaceRecord(Context context, AttributeSet attrs) {
         super(context);
         initMyView(context);
      }

      public void initMyView(context){
         ctx = context;           // 保存 context 備用
         holder = getHolder();    // 獲取把柄,備用
         holder.addCallback(this);// 加入 callback
         // ...
      }

      @Override
      public void  surfaceCreated(SurfaceHolder holder){
         // ...
      }

      @Override
      public void surfaceDestroyed(SurfaceHolder holder){
         // ...
      }

      @Override
      public void  surfaceChanged(SurfaceHolder holder, int format, int width, int height){
         // ...
      }

}

Android 的在 SurfaceView 增加 button

在 res/layout 底下定義的 activity_main.xml 是一個很神奇的檔案, 裏面所定義標籤類型是可以創造實體出來的, 對於像是放在 RelativeLayout 標籤裏面的類型,其安排的順序也很重要.例如以下的範例,該 activity 關聯到一個 java package名稱: com.example.mint.recordvideo,主程式名稱是: MainActivity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mint.recordvideo.MainActivity">


<com.example.mint.recordvideo.mySurfaceRecord
    android:id="@+id/myview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


<Button
    android:id="@+id/button_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:onClick="stopMyView" />
</RelativeLayout>
該例子會創造(new)出兩個物件實體(instance),一個是自行定義的類型mySurfaceRecord,自行定義的類型(class)務必要給冠上package名稱,否則執行時鐵定出錯!它是繼承自SurfaceView而來,另外一個是Android系統的內建Button類型,java程式透過
findViewById(R.id.button_stop)以找到Button的實體(instance).按鍵類型必須放在後面才不會被SurfaceView 擋住看不見,底下是主程式: MainActivity.java:
package com.example.mint.recordvideo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button quitButton = (Button) findViewById(R.id.button_stop);
    quitButton.setText("結束");
  }
  public void stopMyView(View v){
    finish();
  }
}
底下是自行定義的類型:mySurfaceRecord.java,須注意的是自行定義類型mySurfaceRecord的建構式必須要定兩個參 數Context 及 AttributeSet,
否則執行時就會出錯!

package com.example.mint.recordvideo;

import android.content.Context;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class mySurfaceRecord extends SurfaceView implements SurfaceHolder.Callback    {
      private SurfaceHolder holder;
      private Context ctx;

      public mySurfaceRecord(Context context, AttributeSet attrs) {
         super(context);
         initMyView(context);
      }

      public void initMyView(context){
         ctx = context;           // 保存 context 備用
         holder = getHolder();    // 獲取把柄,備用
         holder.addCallback(this);// 加入 callback
         // ...
      }

      @Override
      public void  surfaceCreated(SurfaceHolder holder){
         // ...
      }

      @Override
      public void surfaceDestroyed(SurfaceHolder holder){
         // ...
      }

      @Override
      public void  surfaceChanged(SurfaceHolder holder, int format, int width, int height){
         // ...
      }

}