2017年3月15日 星期三

android app背景的touch事件

android app背景的touch事件,在網路上有資料,整理一下

1.
AndroidManifest.xml要給權限,加入

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />



AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yplin.myapplication11">
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />


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

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

</manifest>


2.
取得WindowManager(是一個更上層的obj,可google一下)
建立dunmmy view(空的view)
設置LayoutParams
根據LayoutParams將dummy view加mWindowManager



package com.example.yplin.myapplication11;

import android.graphics.PixelFormat;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

import android.view.MotionEvent;
import android.view.View;

import android.view.WindowManager;
import android.widget.LinearLayout;

//繼承AppCompatActivityAppCompatActivity實做OnTouchListener
public class MainActivity11 extends AppCompatActivity implements   View.OnTouchListener {

    private LinearLayout lc=null;
    private CustomView1 canvas_view =null;
    @Override    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main11);
        lc=(LinearLayout)findViewById(R.id.view1);
        canvas_view = new CustomView1(this);
        Context mContext=getApplicationContext();
        // 取得WindowManagerWindowManager        
        WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        //建立一個dummy的view        
        LinearLayout mDummyView = new LinearLayout(mContext);
        //新設置LayoutParams叫params,注意androidManifest.xml需給權限        
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                1, /* width */                1, /* height */                
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSPARENT        );
        //可更改dummy view設置params        
        //mDummyView.setLayoutParams(params);        
        //dummy view設置touch傾聽事件        
        mDummyView.setOnTouchListener(this);
        //根據params將dummy view加mWindowManager
        mWindowManager.addView(mDummyView, params);
    }
    //實作OnTouchListener的onTouch傾聽事件方法    
        @Override    
        public boolean onTouch(View v, MotionEvent event) {
        //LinearLayout lc=(LinearLayout)findViewById(R.id.view1);        
        if(lc.indexOfChild(canvas_view)==-1) {

            lc.addView(canvas_view);
        }
        else        {
            lc.removeAllViews();
        }
        return false;
    }

    class CustomView1 extends View{

        Paint paint;

        public CustomView1(Context context) {
            super(context);
            paint = new Paint();                   //設置一新畫筆            
            paint.setColor(Color.RED);             //黄色            
            paint.setStrokeJoin(Paint.Join.ROUND);
            paint.setStrokeCap(Paint.Cap.ROUND);
            paint.setStrokeWidth(3);               //設置一筆刷大小3        }

        //create circle        
        @Override        
        protected void onDraw(Canvas canvas) {

            canvas.drawCircle(100, 100, 90, paint);

        }

    }
}


實際結果,背景下觸摸螢幕,touch事件被這app接收了



video















































read more...

2017年3月12日 星期日

用SIKULI去android手機內抓圖做點擊

一般網路上看到的,都是用電腦接手機投射到電腦螢幕,抓電腦手機螢幕的圖,在外國網站有人用sikuli直接去手機內抓螢幕的圖,控制手機,而不是在電腦螢幕去做控制,終於試出來了,你要先安裝adb,若你有安裝android studio,其實就有adb了,在安裝目錄下.../Android/sdk/platform-tools/adb device -l

1.
terminal下執行下面指令連接手機

../Android/sdk/platform-tools/adb device -l

2.
sikuli API android目錄有一個ADBScreen class,import它,叫用start函式,會傳回android螢幕物件screen,我們就可在android手機內做動作,譬如螢幕抓圖,螢幕點擊.....等,下面是一個簡單抓圖和螢幕點擊

import org.sikuli.android.ADBScreen as Ascreen #把ADBScreen直接設成Ascreen
x=Ascreen.start()      #傳回androi screen


3.
SIKULI-IDE的python程式

#####################convert######################
#請用android studio看jar的程式
assert load('/Users/yplin/sikulix.jar')
import org.sikuli.android.ADBScreen as Ascreen #把ADBScreen直接設成Ascreen
import subprocess
#有安裝android studio找到adb用adb devices -l連接手機
#subprocess.call("/Users/yplin/Library/Android/sdk/platform-tools/adb devices -ladb devices -l".split())
#import org.sikuli.android.ADBClient as Aclient
#print(Aclient.getDevice())

x=Ascreen.start()      #傳回androi screen
use(x)                 #use
x.needsUnLock = False
wakeUp(2)
#store_path_base = os.getenv("HOME")
#new_path=os.path.join(store_path_base,"SIKULI/PNG/t.png")
new_path="/Users/yplin"
reg=x.newRegion(0,0,1000,1000)  #手機區域region
#reg.highlight(1)
img=x.capture(reg)      #抓手機螢幕圖
click(reg)              #點擊手機螢幕
img.save(new_path)      #存檔

popup("capture picture ok")

抓到圖的結果(左邊下面的小圖):

read more...

2016年7月22日 星期五

SKILL寫的可做出各種SUB RING

使用ROD寫出SUB RIN,可畫出N RING ,P RING,SINGLE RING,DOUBLE RING,DOUBLE RING可指定RING是P在內側或外側,CONTACT各要幾排


ENTER PATH SINGLE RING



ENTER BOX DOUBLE RING

 ENTER BOX DOUBLE RING設M1可chop,其它不可chop






read more...

2016年2月29日 星期一

最後的回億公園的小鴨鴨永遠再見了

  當時第一次來美國,真的是很開心,天氣超好,走在路上,陽光灑在身上,真的很舒服,對我而言從沒想說會來美國,一直都是在冬天濕冷,夏天濕熱的台彎,加州的天氣,對我來說就像天堂,當初剛來覺的每個人都很好,想說這裡人們心胸應該不一樣,其實我錯了,人都是一樣的。

  假日有空時,總喜歡到Sunnyvale baylands park公園,吹風,因為哪公園靠海,吹著風很舒服,濕地上有水,有好幾處小湖,小鴨鴨都會在那覓食,看它們悠閒的水中游著,真的好羨慕它們。

  上次來加州,就沒之前愉快,這次來心裡也不痛快,既然這樣,不會再來了,也不會回頭了,到此為止,天下總沒有不散的宴席,不可能有永遠不散的,不用傷心吧,我是一個可以心裡什麼都沒有的人,自己過的好,管好自己,心對得起自己,不奢望別人的眼光,照顧好自己,總比為別人活,來的強多了。

  再傻,也只會被騙一次吧,不會再有第2次了。世上不覺得有誰是可以信任的。

 快結束了要回去了,想念愛車比任何人都值吧,假日跟小march到處走,去吃美食,去山上爬山,去海邊吹著海風,無聊對著愛車說話,說著心事,比任何人都好,騎著自行車爬爬山,鍛鍊身體,比什都有意義,自己活的好就好。

  最後,想念的公園小鴨鴨,你們要永遠幸福,回憶就永遠留在心中吧,加州這次要永遠說再見了。










read more...

2016年1月30日 星期六

想念的加州公園

這是第四次來美國了,己經來一個月了,上上星期,到單車店刷卡400多美金,買了一輛單車來騎,這星期六,自己騎著單車到公園散心,天氣不錯,躺在公園的草地上,中午有出一些太陽,很溫暖,左公園繞一陣子,看見鴨子在濕地,游來游夫,悠閒的樣子。

 想到以前來美國住的旅館晃晃,沿著單車道騎,想到以前住旅館時,假日都是走這,小跑步到公園散心,有著許多回憶,好懷念啊,下午4點多了,去附近吃飯,回到住的己經5點多了。
拍了一些照片,留下紀念





read more...

2015年12月25日 星期五

在樹莓派使用 python gtk2 cairo 製照動畫

安裝
apt-get install python-cairo python-cairo-dev python-gi-cairo python-gtk2 python-gtk2-dev 

把之前寫的程式稍微改一下,就能在樹莓派製作game,gtk3有bug,動畫會停住,還是gtk2好用,本來想寫很多,人一懶工作又累,假日又要運動,每次都寫一些就停掉了 ,之前python寫的程式game,拿到樹莓派,哈哈,還滿順的,有空再據續寫.





read more...

2015年12月18日 星期五

raspberry pi2裝debian8

終於在raspberry pi2裝好debian8,不是樹梅派官方下載的那個jessie,覺的還是debian好用,執行上比其他版本快很多,這個dd完只有幾百M,一開始只能進到文字模式,沒聲音也沒x windows,套件要自己從網路安裝(apt-get install),以前剛玩debiab都是要自己一個個慢慢裝,現在網路快多了,都有整個包好的OS DVD可下載,已經很久沒一個一個裝了,遇到問題google一下應該都有答案.

VLC和KODI很難搞,哈哈,查了網路一堆資料,試了好幾個星期,終於搞定,有點成就感,debian8裝完VCL沒畫面,試很久都失敗,連原碼下載編譯都一樣,換樹梅派官方的那個jessie源裝也失敗,後來大概知道是video output沒裝上,網路上找不到裝video output資料,死馬當活馬醫,apt-cache search把還疑的試著裝看看,竟然有畫面了,不過不順暢,試太多東西可能衝突,就dd一個新的os,重裝VLC,果然就OK,4顆cpu大約60~70%,很順,GPU硬體加速有起來,超興奮,不過只能全螢幕播放.

KODI也是試很久,最後也給我弄起來了,不過只能切換到root,啟動KODI,一般使用者起不來,應該只是權限關係,算了已經很OK了,把樹梅派弄跟桌機差不多一模一樣了.


桌面登入安裝lightdm,桌面管理安裝icewm,聲音系統安裝alsa


收集安裝了一些套件,程式開發anjuta(加glade),mp3音樂播放器xmms2,影音播放器VLC,視聽中心KODI,安裝GPIO,安裝中文輸入和檔案瀏覽器,web瀏覽器,文字編輯器,相片瀏覽器,設定spi-dev model


VLC
KODI



  我的樹莓派  debian8 桌面
新 kernel
xmms2
anjuta
vlc
kodi







read more...