[Android][五子棋]②--初始化onTouch事件

增加的代碼

  private Bitmap mWhitePiece;

    private  Bitmap mBlackPiece;

    //棋子的大小比例
    private float ratioPieceOfLineHeigh=3*1.0f/4;

    //白棋先走,當(dāng)前輪到白棋
    private boolean mIsWhite=true;
    private List<Point> mWhiteArray=new ArrayList<>();
    private List<Point> mBlackArray=new ArrayList<>();
 @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {

        //棋子寬度
        int pieceWidth= (int) (mLineHeight*ratioPieceOfLineHeigh);
        mWhitePiece=Bitmap.createScaledBitmap(mWhitePiece,pieceWidth,pieceWidth,false);
        mBlackPiece=Bitmap.createScaledBitmap(mBlackPiece,pieceWidth,pieceWidth, false);

    }
@Override
    public boolean onTouchEvent(MotionEvent event) {

        int action = event.getAction();
        //不能ACTION_DOWN 因?yàn)槿绻灞P是可滾動(dòng)的 在滾動(dòng)過程中也會(huì)執(zhí)行此事件
        if(action==MotionEvent.ACTION_UP){

            int x= (int) event.getX();
            int y= (int) event.getY();


            Point p=getValidPoint(x,y);

            if(mWhiteArray.contains(p)||mBlackArray.contains(p)){
                return false;
            }

            if(mIsWhite){
                mWhiteArray.add(p);
            }else {
                mBlackArray.add(p);
            }

            invalidate();
            mIsWhite=!mIsWhite;

            return true;
        }
        return true;
    }

    /**
     * 獲取點(diǎn)擊在合理范圍的點(diǎn)
     * @param x
     * @param y
     * @return
     */
    private Point getValidPoint(int x, int y) {
        return new Point((int)(x/mLineHeight),(int)(y/mLineHeight));
    }

完整代碼

package myapplication4.xt.com.wuziqidemo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by TONG on 2017/6/7.
 */

public class WuziqiPanel extends View {

    //棋盤寬度
    private int mPanelWidth;

    //每格行高
    private float mLineHeight;

    //格子數(shù)
    private int MAX_LINE=10;

    private Paint mPaint=new Paint();

    private Bitmap mWhitePiece;

    private  Bitmap mBlackPiece;

    //棋子的大小比例
    private float ratioPieceOfLineHeigh=3*1.0f/4;

    //白棋先走贸营,當(dāng)前輪到白棋
    private boolean mIsWhite=true;
    private List<Point> mWhiteArray=new ArrayList<>();
    private List<Point> mBlackArray=new ArrayList<>();



    public WuziqiPanel(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        setBackgroundColor(0x44ff0000);

        //初始化
        init();

    }

    private void init() {
        mPaint.setColor(0x88000000);
        //抗鋸齒
        mPaint.setAntiAlias(true);
        //防抖動(dòng)
        mPaint.setDither(true);
        //畫筆為空心
        mPaint.setStyle(Paint.Style.STROKE);

        mWhitePiece= BitmapFactory.decodeResource(getResources(),R.drawable.stone_w2);
        mBlackPiece=BitmapFactory.decodeResource(getResources(),R.drawable.stone_b1);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthSize=MeasureSpec.getSize(widthMeasureSpec);
        int widthMode=MeasureSpec.getMode(widthMeasureSpec);

        int heightSize=MeasureSpec.getSize(heightMeasureSpec);
        int heightMode=MeasureSpec.getMode(heightMeasureSpec);

        int width=Math.min(widthSize,heightSize);

        //嵌套在scrollow中寬度或高度不確定
        if(widthMode==MeasureSpec.UNSPECIFIED){
            width=heightSize;
        }else if(heightMode==MeasureSpec.UNSPECIFIED){
            width=widthSize;
        }

        setMeasuredDimension(width,width);

    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        //設(shè)置棋盤寬度
        mPanelWidth=w;
        //設(shè)置格子線的高度
        mLineHeight=mPanelWidth*1.0f/MAX_LINE;

        //棋子寬度
        int pieceWidth= (int) (mLineHeight*ratioPieceOfLineHeigh);
        mWhitePiece=Bitmap.createScaledBitmap(mWhitePiece,pieceWidth,pieceWidth,false);
        mBlackPiece=Bitmap.createScaledBitmap(mBlackPiece,pieceWidth,pieceWidth, false);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        int action = event.getAction();
        //不能ACTION_DOWN 因?yàn)槿绻灞P是可滾動(dòng)的 在滾動(dòng)過程中也會(huì)執(zhí)行此事件
        if(action==MotionEvent.ACTION_UP){

            int x= (int) event.getX();
            int y= (int) event.getY();


            Point p=getValidPoint(x,y);

            if(mWhiteArray.contains(p)||mBlackArray.contains(p)){
                return false;
            }

            if(mIsWhite){
                mWhiteArray.add(p);
            }else {
                mBlackArray.add(p);
            }

            invalidate();
            mIsWhite=!mIsWhite;

            return true;
        }
        return true;
    }

    /**
     * 獲取點(diǎn)擊在合理范圍的點(diǎn)
     * @param x
     * @param y
     * @return
     */
    private Point getValidPoint(int x, int y) {
        return new Point((int)(x/mLineHeight),(int)(y/mLineHeight));
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawBoard(canvas);
    }

    private void drawBoard(Canvas canvas) {
        int w=mPanelWidth;
        float lineHeight=mLineHeight;

        for(int i=0;i<MAX_LINE;i++){
            int startX= (int) (lineHeight/2);
            int endX= (int) (w-lineHeight/2);

            int y= (int) ((0.5+i)*lineHeight);

            //畫豎線
            canvas.drawLine(startX,y,endX,y,mPaint);
            //畫橫線
            canvas.drawLine(y,startX,y,endX,mPaint);


        }

    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市躲庄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佛点,老刑警劉巖渤涌,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咏雌,死亡現(xiàn)場離奇詭異,居然都是意外死亡悉稠,警方通過查閱死者的電腦和手機(jī)宫蛆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來的猛,“玉大人耀盗,你說我怎么就攤上這事∝宰穑” “怎么了叛拷?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岂却。 經(jīng)常有香客問我忿薇,道長裙椭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任煌恢,我火速辦了婚禮骇陈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瑰抵。我一直安慰自己你雌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布二汛。 她就那樣靜靜地躺著婿崭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肴颊。 梳的紋絲不亂的頭發(fā)上氓栈,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音婿着,去河邊找鬼授瘦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竟宋,可吹牛的內(nèi)容都是我干的提完。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼丘侠,長吁一口氣:“原來是場噩夢啊……” “哼徒欣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蜗字,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤打肝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后挪捕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粗梭,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年级零,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了断医。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妄讯,死狀恐怖孩锡,靈堂內(nèi)的尸體忽然破棺而出酷宵,到底是詐尸還是另有隱情亥贸,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布浇垦,位于F島的核電站炕置,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朴摊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一默垄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甚纲,春花似錦口锭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至春哨,卻和暖如春荆隘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赴背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工椰拒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凰荚。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓燃观,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浇揩。 傳聞我的和親對象是個(gè)殘疾皇子仪壮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件胳徽、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 中國人講究親情积锅、友情、面子养盗,為朋友可以兩肋插刀缚陷。但是在現(xiàn)今社會(huì)里人與人之間關(guān)系變得越來越復(fù)雜,幫助他人有時(shí)候不會(huì)得...
    冬青一內(nèi)蒙閱讀 629評論 0 0
  • 有那么轉(zhuǎn)身的一刻 我依然是我 身后早已不見你的婀娜 繼續(xù)顧自的走著 哼著街頭響起的歌 我想不起我有什么曾丟失過 亦...
    幾處留白向陽花開閱讀 197評論 2 4
  • 豆瓣:8.3 個(gè)人:8.6 看完之后忍不住發(fā)了條微信虎锚,洗澡的時(shí)候想為什么要發(fā)微信,之于我衩婚,微信只不過是個(gè)工具窜护,而不...
    水_印閱讀 264評論 0 1