Android View分地區點擊實現方案——1.根據座標範圍

來源:互聯網
上載者:User

Android View分地區點擊實現方案——1.根據座標範圍
Android View分地區點擊實現方案——1.根據座標範圍

標籤: Android學習記錄

引言

好噠,很久沒更新部落格裡關於Android的博文了,有小夥伴經常在群裡問或者私聊我:
讀者:“Android進階什麼時候出,寫什麼Git,資料結構,專心寫Android進階…”之類的話,
對此表示我很無奈:

讀者:好吧,怪我…

嗯,不是自己不想寫,主要是自己現在的事情比較多,接觸的東西越多,學的東西越多,
除了要完成公司項目外,還有一些其他的東西要學,前段時間剛做完電台的項目,現在
要和另外一個同事搞Launchar,做其中的一個模組,模組裡需要用到OpenGL,對於OpenGL
是陌生的,又得花時間去學,就這樣,我也想靜靜地琢磨一些東西,然後寫點什麼,但是
要終歸要回到現實,為了生活,是吧!不過還是決定,不定期給大家寫一些自己項目中遇
到的一些東東,比如這節要講的View分地區點擊的實現方案,這是在看到另一個同事的項
目,點擊一頭豬的不同部位,執行不同的動畫,而這頭豬是一個自己寫的用於顯示動畫的
View,本節提供的方案就是:根據不同的座標範圍來判斷點擊地區,好的,話不多說,開
始本節內容!

素材準備

好的,隨手開啟win內建的畫圖,畫一個400 * 400的圖形:

代碼實現

這裡由於時間關係,就直接寫一個繼承ImageView的View,然後直接通過屬性設定圖片背景。
關鍵區段在onTouchEvent部分!這裡對點擊座標的地區做判斷,然後直接調用Activity裡
定義的顯示Toast的方法,這裡只是方便示範,實際開發中不建議直接把方法暴露出來!

RegionCoordView.java

/** * Created by coder-pig on 2016/4/12. */public class RegionCoordView extends ImageView {    private Context mContext;    public RegionCoordView(Context context) {        this(context, null);    }    public RegionCoordView(Context context, AttributeSet attrs) {        super(context, attrs);        mContext = context;        init();    }    private void init() {    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (event.getAction() == MotionEvent.ACTION_BUTTON_PRESS) {            float x = event.getX();            float y = event.getY();            int area = 0;            if (x >= 0 && x < 200 && y > 0 && y < 200) {                area = 1;            } else if (x > 200 && x < 400 && y > 0 && y < 200) {                area = 2;            } else if (x > 0 && x < 200 && y > 200 && y < 400) {                area = 3;            } else if (x > 200 && x < 400 && y > 200 && y < 400) {                area = 4;            }            ((MainActivity) mContext).showClickArea(area);        }        return super.onTouchEvent(event);    }}

MainActivity.java

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void showClickArea(int area) {        Toast.makeText(MainActivity.this,"您點擊到了第" + area + "塊地區!",Toast.LENGTH_SHORT).show();    }}

activity_main.xml

    
運行小結:

好的,代碼還是非常簡單的,技巧無非是通過擷取TouchEvent的觸摸點的x,y座標,
然後做判斷,非常簡單,當然這種方案適用於固定普通的規則圖形,比如上面的
正方形,三角形,圓形,或者弧形,但是映像越複雜,地區的判斷就越麻煩,假如
是下面這種要你判斷這樣點擊地區的呢?不同顏色代表不同響應的點擊地區。


本節講述的方案明顯是玩不起了…沒事,下節給大家提供另外一個解決方案,
根據像素點來判斷點擊地區~
PS:因為AS的原因,這裡貼的代碼是沒運行過的,理論可行哈,實際不知道…
完整代碼和運行,明天到公司在貼下!本來想12點前就睡覺的,我真是服了這
長城寬頻,各種垃圾,翻牆卡成翔,結果下個gradle下了我1個多小時…然後還是沒下完,
我真不知道說什麼好…

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.