2019年2月18日 星期一

[Android]_ch7.3_存取assets目錄內的資源



取得assets目錄內的檔案內容是透過較低階的IO方式,並使用AssetManager類別的功能

btn4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AssetManager AM=getAssets();
try {
InputStream is=AM.open("A2019.txt");
int num=is.available();
byte data[]=new byte[num];
is.read(data);
String string=new String(data);
tv4.setText("檔案大小:"+num+"位元組\n"+string);
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
});

2019年2月15日 星期五

Android ch6 5 隱含意圖1



[Android]_ch6.5_隱含意圖1



package com.derek.ch20_implictintent;



import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.AdapterView.OnItemSelectedListener;

import android.widget.Spinner;





public class MainActivity extends Activity {

Spinner sp1;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        sp1=(Spinner)findViewById(R.id.spinner1);

        String items[]={"隱含意圖介紹","網頁查詢","播號面板","直接撥號","簡訊傳送","地圖定位"};

        ArrayAdapter<String> AA=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, items);

        AA.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        sp1.setAdapter(AA);

        sp1.setOnItemSelectedListener(new OnItemSelectedListener() {



@Override

public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {

switch(position){

case 1:

Intent i1=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.104.com.tw"));

startActivity(i1);

break;

case 2:

Intent i2=new Intent(Intent.ACTION_DIAL,Uri.parse("tel:0912345678"));

startActivity(i2);

break;

case 3:

Intent i3=new Intent(Intent.ACTION_CALL,Uri.parse("tel:0912345678"));

startActivity(i3);

break;

case 4:

Intent i4=new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:0912345678"));

i4.putExtra("sms_body", "今晚東北季風又來了!");

startActivity(i4);

break;

case 5:

Intent i5=new Intent(Intent.ACTION_VIEW,Uri.parse("geo:24.801597559005653,120.97159624099731"));

startActivity(i5);

break;

}

}



@Override

public void onNothingSelected(AdapterView<?> parent) {

// TODO Auto-generated method stub



}

});

    }





}


2019年2月13日 星期三

[Android]_ch6.4_活動的外觀與方向設定



[Android]_ch6.4_活動的外觀與方向設定




樣式名稱

說明

Theme.NoTitleBar

活動視窗沒有標題列

Theme.NoTitleBar.Fullscreen

活動視窗全螢幕顯示

Theme.Dialog

讓活動視窗看起來像對話方塊

Theme.Wallpaper

在活動視窗套用使用者選擇的桌布,需要API層級6之上才支援


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.derek.ch19__bundle"

    android:versionCode="1"

    android:versionName="1.0" >



    <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="19" />



    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".Act01"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity android:name="Act02" android:theme="@android:style/Theme.NoTitleBar"></activity>

        <activity android:name="Act03"  android:theme="@android:style/Theme.Dialog"></activity>

    </application>



</manifest>



btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
});
        btn4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});

[Android]_ch6.3_取得活動的回傳資料



[Android]_ch6.3_取得活動的回傳資料

1.Act01.java

package com.derek.ch19__bundle;



import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;





public class Act01 extends Activity {

Button btn1;

EditText et1,et2,et3;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.act01);

        et1=(EditText)findViewById(R.id.editText1);

        et2=(EditText)findViewById(R.id.editText2);

        et3=(EditText)findViewById(R.id.editText3);

        btn1=(Button)findViewById(R.id.button1);

        btn1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

double n1=Double.parseDouble(et1.getText().toString());

double n2=Double.parseDouble(et2.getText().toString());

double n3=Double.parseDouble(et3.getText().toString());

Intent intent=new Intent();

intent.setClass(Act01.this, Act02.class);

Bundle bundle=new Bundle();

bundle.putDouble("1", n1);

bundle.putDouble("2", n2);

bundle.putDouble("3", n3);

intent.putExtras(bundle);

startActivityForResult(intent, 100);

}

});

        Log.v("活動:Act01", "1.onCreate");

    }

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// TODO Auto-generated method stub

super.onActivityResult(requestCode, resultCode, data);

if(resultCode==RESULT_OK){

switch(requestCode){

case 100:

Bundle b=data.getExtras();

String output=b.getString("Result");

TextView tv4=(TextView)findViewById(R.id.textView4);

tv4.setText(output);

break;

}

}else{



}

}

}



2.Act02.java

package com.derek.ch19__bundle;



import android.app.Activity;

import android.app.AlertDialog;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;



public class Act02 extends Activity{

TextView tv2_1;

Button btn2_1;

String result;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.act02);

tv2_1=(TextView)findViewById(R.id.textView2_1);

btn2_1=(Button)findViewById(R.id.button2_1);

Intent intent=this.getIntent();

Bundle bundle=intent.getExtras();

double n1=bundle.getDouble("1");

double n2=bundle.getDouble("2");

double n3=bundle.getDouble("3");

double sum=n1+n2+n3;

double avg=sum/3;

result="國文:"+n1+"\n英文:"+n2+"\n數學:"+n3+"\n總分:"+sum+"\n平均:"+avg;

tv2_1.setText(result);

btn2_1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent();

Bundle bundle=new Bundle();

bundle.putString("Result", result);

intent.putExtras(bundle);

setResult(RESULT_OK, intent);

finish();

}

});

Log.v("活動:Act02", "1.onCreate即將進入執行狀態");

}

}


2019年2月1日 星期五

[Android]_ch5.12_GridView清單元件





[Android]_ch5.12_GridView清單元件



package com.derek.ch18_intent;



import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.Toast;

import android.widget.Gallery.LayoutParams;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.ImageView.ScaleType;



public class Act02 extends Activity{

Button btn2_1;

GridView GV;

ImageView IV;

int images[]={R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5,

R.drawable.a6,R.drawable.a7,R.drawable.a8,R.drawable.a9,R.drawable.a10,

R.drawable.a11,R.drawable.a12,R.drawable.a13,R.drawable.a14,R.drawable.a15};

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.act02);

btn2_1=(Button)findViewById(R.id.button2_1);

btn2_1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent=new Intent(Act02.this,Act01.class);

startActivity(intent);

}

});

GV=(GridView)findViewById(R.id.gridView1);

IV=(ImageView)findViewById(R.id.imageView1);

GV.setAdapter(new MyAdapter());

GV.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

Toast.makeText(Act02.this, "No."+(position+1), Toast.LENGTH_SHORT).show();

IV.setImageResource(images[position]);

}

});

}

class MyAdapter extends BaseAdapter{

@Override

public int getCount() {

// TODO Auto-generated method stub

return images.length;

}



@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}



@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}



@Override

public View getView(int position, View convertView, ViewGroup parent) {

ImageView iv;

if(convertView==null){

iv=new ImageView(Act02.this);

iv.setLayoutParams(new GridView.LayoutParams(100,150));

iv.setScaleType(ScaleType.FIT_XY);

}else{

iv=(ImageView)convertView;

}

iv.setImageResource(images[position]);

return iv;

}



}



}


2019年1月30日 星期三

[Android]_ch5.11_ListView清單元件2





[Android]_ch5.11_ListView清單元件2

package com.derek.ch17_listview;



import android.R.integer;

import android.R.layout;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;





public class MainActivity extends Activity {

ListView LV;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        LV=(ListView)findViewById(R.id.listView1);

        LV.setAdapter(new MyAdapter(MainActivity.this));

        LV.setOnItemClickListener(new OnItemClickListener() {

        @Override

public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

        TextView tv=((TextView)((LinearLayout)view).getChildAt(1));       

Toast.makeText(MainActivity.this, tv.getText().toString(), Toast.LENGTH_SHORT).show();

}

});

    }

    class MyAdapter extends BaseAdapter{

    int images[]={R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5,

    R.drawable.a6,R.drawable.a7,R.drawable.a8,R.drawable.a9,R.drawable.a10,

    R.drawable.a11,R.drawable.a12,R.drawable.a13,R.drawable.a14,R.drawable.a15};

    LayoutInflater layoutInflater;

    public MyAdapter(Context context) {

layoutInflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return images.length;

}



@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}



@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}



@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder;

if(convertView==null){

convertView=layoutInflater.inflate(R.layout.listitems, null);

viewHolder=new ViewHolder();

viewHolder.iv=(ImageView)convertView.findViewById(R.id.imageView1);

viewHolder.tv=(TextView)convertView.findViewById(R.id.textView1);

viewHolder.btn=(Button)convertView.findViewById(R.id.button1);

convertView.setTag(viewHolder);

}else{

viewHolder=(ViewHolder)convertView.getTag();

}

viewHolder.iv.setImageResource(images[position]);

viewHolder.tv.setText("No."+(position+1));

viewHolder.btn.setText("按鈕"+(position+1));

viewHolder.btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this, ((Button)v).getText(), Toast.LENGTH_SHORT).show();

}

});

return convertView;

}

class ViewHolder{

ImageView iv;

TextView tv;

Button btn;

}   

    }

}


Android ch5 10 ListView清單元件1



[Android]_ch5.10_ListView清單元件

package com.derek.ch17_listview;



import android.R.integer;

import android.R.layout;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;





public class MainActivity extends Activity {

ListView LV;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        LV=(ListView)findViewById(R.id.listView1);

        LV.setAdapter(new MyAdapter(MainActivity.this));

        LV.setOnItemClickListener(new OnItemClickListener() {

        @Override

public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

        TextView tv=((TextView)((LinearLayout)view).getChildAt(1));       

Toast.makeText(MainActivity.this, tv.getText().toString(), Toast.LENGTH_SHORT).show();

}

});

    }

    class MyAdapter extends BaseAdapter{

    int images[]={R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5,

    R.drawable.a6,R.drawable.a7,R.drawable.a8,R.drawable.a9,R.drawable.a10,

    R.drawable.a11,R.drawable.a12,R.drawable.a13,R.drawable.a14,R.drawable.a15};

    LayoutInflater layoutInflater;

    public MyAdapter(Context context) {

layoutInflater=(LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE);

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return images.length;

}



@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}



@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return 0;

}



@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder;

if(convertView==null){

convertView=layoutInflater.inflate(R.layout.listitems, null);

viewHolder=new ViewHolder();

viewHolder.iv=(ImageView)convertView.findViewById(R.id.imageView1);

viewHolder.tv=(TextView)convertView.findViewById(R.id.textView1);

convertView.setTag(viewHolder);

}else{

viewHolder=(ViewHolder)convertView.getTag();

}

viewHolder.iv.setImageResource(images[position]);

viewHolder.tv.setText("No."+(position+1));

return convertView;

}

class ViewHolder{

ImageView iv;

TextView tv;

}   

    }

}


2019年1月28日 星期一

Android ch5 9 ListActivity條列項目元件



[Android]_ch5.9_ListActivity條列項目元件

package com.derek.ch16_listactivity;



import android.app.Activity;

import android.app.ListActivity;

import android.content.res.Resources;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.Toast;





public class MainActivity extends ListActivity {



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        //setContentView(R.layout.activity_main);

        Resources resources=getResources();

        String course[]=resources.getStringArray(R.array.course);

        ArrayAdapter<String> AA=new ArrayAdapter<String>(MainActivity.this, R.layout.listitems, course);

        ListView listView=getListView();

        setListAdapter(AA);

        listView.setTextFilterEnabled(true);

        listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

Toast.makeText(MainActivity.this,parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();

}

});

    }

}



Android ch4 12 執行進度對話元件



[Android]_ch4.12_執行進度對話元件



package com.derek.ch15_progessdialog;



import android.R.integer;

import android.app.Activity;

import android.app.Dialog;

import android.app.ProgressDialog;

import android.content.DialogInterface;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;





public class MainActivity extends Activity {

Button btn1;

TextView tv1;

Handler handler;

ProgressDialog pDialog;

int p=0;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tv1=(TextView)findViewById(R.id.textView1);

        btn1=(Button)findViewById(R.id.button1);

        handler=new Handler(){

@Override

public void handleMessage(Message msg) {

if(p>=100){

pDialog.dismiss();

tv1.setText("下載完成...");

}else{

p++;

pDialog.incrementProgressBy(2);

handler.sendEmptyMessageDelayed(0, 200);

tv1.setText("下載進度..."+pDialog.getProgress()+"%");

}

}};

       

        btn1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

showDialog(0);

pDialog.setProgress(0);

handler.sendEmptyMessage(0);

p=0;

}

});

    }

@Override

@Deprecated

protected Dialog onCreateDialog(int id) {

switch(id){

case 0:

pDialog=new ProgressDialog(MainActivity.this);

pDialog.setTitle("下載檔案");

pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

pDialog.setButton(DialogInterface.BUTTON_POSITIVE,"隱藏", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(MainActivity.this, "隱藏下載對話方塊", Toast.LENGTH_SHORT).show();

}

});

pDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(MainActivity.this, "取消下載", Toast.LENGTH_SHORT).show();

}

});

return pDialog;





}

return super.onCreateDialog(id);

}

   

}


2019年1月26日 星期六

[Android]_ch11.12_圖片輪播元件



[Android]_ch11.12_圖片輪播元件

package com.derek.ch33_animationdrawable;



import android.app.Activity;

import android.content.res.Resources;

import android.graphics.drawable.AnimationDrawable;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.widget.ImageView;

import android.widget.TextView;





public class MainActivity extends Activity {

ImageView iv;

TextView tv;

Drawable s1,s2,s3,s4,s5,s6;

AnimationDrawable animationDrawable;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        iv=(ImageView)findViewById(R.id.imageView1);

        tv=(TextView)findViewById(R.id.textView1);

        Resources resources=getResources();

        s1=resources.getDrawable(R.drawable.s1);

        s2=resources.getDrawable(R.drawable.s2);

        s3=resources.getDrawable(R.drawable.s3);

        s4=resources.getDrawable(R.drawable.s4);

        s5=resources.getDrawable(R.drawable.s5);

        s6=resources.getDrawable(R.drawable.s6);

        animationDrawable=new AnimationDrawable();

        animationDrawable.addFrame(s1, 200);

        animationDrawable.addFrame(s2, 100);

        animationDrawable.addFrame(s3, 100);

        animationDrawable.addFrame(s4, 400);

        animationDrawable.addFrame(s5, 100);

        animationDrawable.addFrame(s6, 100);

        animationDrawable.setOneShot(false);

        iv.setBackground(animationDrawable);

        animationDrawable.start();

    }

@Override

public boolean onTouchEvent(MotionEvent event) {

if(event.getAction()==MotionEvent.ACTION_DOWN){

if(!animationDrawable.isRunning())

animationDrawable.start();

else{

animationDrawable.stop();

Drawable drawable=animationDrawable.getCurrent();

if(drawable.equals(s1))

tv.setText("點數 1");

else if(drawable.equals(s2))

tv.setText("點數 2");

else if(drawable.equals(s3))

tv.setText("點數 3");

else if(drawable.equals(s4))

tv.setText("點數 4");

else if(drawable.equals(s5))

tv.setText("點數 5");

else if(drawable.equals(s6))

tv.setText("點數 6");

}

}

return super.onTouchEvent(event);

}

   

}


2019年1月25日 星期五

[Android]_ch11.11_人臉識別元件2



[Android]_ch11.11_人臉識別元件2

package com.derek.ch32_facedetect;



import android.R.integer;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Point;

import android.graphics.PointF;

import android.media.FaceDetector;

import android.media.FaceDetector.Face;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;





public class MainActivity extends Activity {

int pic[]={R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,R.drawable.img6};

    TextView tv;

    ImageView iv;

    Button btn;

    Bitmap bitmap;

    int i=0;

@Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        iv=(ImageView)findViewById(R.id.imageView1);

        tv=(TextView)findViewById(R.id.textView1);

        btn=(Button)findViewById(R.id.button1);

        bitmap=BitmapFactory.decodeResource(getResources(), pic[0]);

        faceDetect();

        btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

bitmap=BitmapFactory.decodeResource(getResources(), pic[(i++)%pic.length]);

faceDetect();

}

});

    }

public void faceDetect(){

Face Faces[]=new Face[pic.length];

Bitmap faceBitmap=bitmap.copy(Bitmap.Config.RGB_565, true);

FaceDetector detector=new FaceDetector(faceBitmap.getWidth(),faceBitmap.getHeight(), Faces.length);

int num=detector.findFaces(faceBitmap, Faces);

if(num>0){

tv.setText("發現"+num+"張人臉");

for(int i=0;i<num;i++){

handleFace(Faces[i]);

}

}else{

tv.setText("抱歉...未發現人臉");

iv.setImageBitmap(bitmap);

}



}

public void handleFace(Face face){

PointF point=new PointF();

float distance=face.eyesDistance();

face.getMidPoint(point);

Bitmap darwBitmap=bitmap.copy(Bitmap.Config.RGB_565 , true);

Canvas canvas=new Canvas(darwBitmap);

Paint paint=new Paint();

paint.setColor(Color.RED);

paint.setStrokeWidth(5);

paint.setStyle(Paint.Style.STROKE);

paint.setAntiAlias(true);

canvas.drawRect(point.x-2*distance, point.y-2*distance, point.x+2*distance, point.y+2*distance, paint);

iv.setImageBitmap(darwBitmap);

}



}


Ether.fi Cash Card 一張所有人必備的加密貨幣信用卡   [Ether.fi Cash Card] : https://www.ether.fi/app/cash/sign-up?ref_code=d27f8523 ------國際交易所------ [Bitg...