View ?基礎(chǔ)知識(shí)

View基礎(chǔ)知識(shí)

View的位置參數(shù)

View的位置主要由它的四個(gè)頂點(diǎn)決定广恢,分別對應(yīng)View的四個(gè)屬性:top、left呀潭、right袁波、bottom瓦阐,top是左上角的縱坐標(biāo),left是左上角的橫坐標(biāo)篷牌,right是右下角的橫坐標(biāo)睡蟋,bottom是右下角的縱坐標(biāo)。注意這些坐標(biāo)都是相對于View的父容器枷颊。

  • left = getLeft();
  • right = getRight();
  • width = right - left戳杀;
  • top = getTop();
  • bottom = getBottom();
  • height = bottom - top;

從android3.0開始夭苗,View增加了額外的幾個(gè)參數(shù):x信卡,y,translationX和translationY题造,其中x和y是View左上角的坐標(biāo)傍菇,而translationX和translationY是View左上角相對于父容器的偏移量,translationX界赔,translationY的默認(rèn)值是0丢习,

  • x = left + translationX
  • y = top + translationY

MotionEvent

手指觸摸屏幕鎖產(chǎn)生的一系列事件,典型事件類型有:

  • ACTION_DOWN----------手指剛接觸屏幕
  • ACTION_MOVE----------手指在屏幕上滑動(dòng)
  • ACTION_UP------------手指在屏幕上松開的一瞬間

通過MotionEvent 對象可以得到觸摸事件的x淮悼、y坐標(biāo)咐低,getX、getY獲取相對于當(dāng)前view左上角的x袜腥、y坐標(biāo)见擦,getRawX、getRawY獲取相對于手機(jī)屏幕左上角的x羹令,y坐標(biāo)

TouchSlop

TouchSlop是系統(tǒng)所能識(shí)別出的被認(rèn)為是滑動(dòng)的最小距離鲤屡,當(dāng)手指在屏幕上滑動(dòng)時(shí),如果兩次滑動(dòng)之間的距離小于這個(gè)常量福侈,那么系統(tǒng)就不認(rèn)為你是在進(jìn)行滑動(dòng)操作执俩。

int touchSlop = ViewConfiguration.get(context).getScaledEdgeSlop();

VelocityTracker

速度追蹤,用于追蹤手指在滑動(dòng)過程中的速度癌刽,包括水平和豎直方向的速度
<pre>
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(motionEvent);
velocityTracker.computeCurrentVelocity(100);//單位毫秒
int xVelocity = (int)velocityTracker.getXVelocity();
int yVelocity = (int)velocityTracker.getYVelocity();
velocityTracker.clear();
velocityTracker.recycle();//不使用時(shí)清除回收
</pre>

手指逆著坐標(biāo)系的正方向滑動(dòng)役首,所產(chǎn)生的速度為負(fù)值,順著正反向滑動(dòng)显拜,所產(chǎn)生的速度為正值

GestureDetector

<pre>
final GestureDetector mGestureDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
Log.d("-->>","按下");
return false;
}

        @Override
        public void onShowPress(MotionEvent e) {
            Log.d("-->>","短按");
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Log.d("-->>","單點(diǎn)");
            return false;
        }

        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            Log.d("-->>","滑動(dòng)");
            Log.d("-->>","滑動(dòng)");
            if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE) {
                Log.i("-->>", "scroll left");
            } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE)              {
                Log.i("-->>", "scroll right");
            }
            return false;
        }

        @Override
        public void onLongPress(MotionEvent e) {
            Log.d("-->>","長按");
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            return false;
        }

    });

    mGestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Log.d("-->>","單擊衡奥,非雙擊中的一個(gè)");
            return false;
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d("-->>","雙擊");
            return false;
        }

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {
            Log.d("-->>","發(fā)生雙擊了");
            return false;
        }
    });
    blue.setFocusable(true);
    blue.setClickable(true);
    blue.setLongClickable(true);

    blue.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return mGestureDetector.onTouchEvent(event);
        }
    });

</pre>

View的滑動(dòng)

使用scrollTo/scrollBy

使用動(dòng)畫,推薦屬性動(dòng)畫

改變布局的LayoutParams远荠,配合ValueAnimator可以實(shí)現(xiàn)平滑效果

使用Scroller

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矮固,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌档址,老刑警劉巖盹兢,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異守伸,居然都是意外死亡绎秒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門尼摹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來见芹,“玉大人,你說我怎么就攤上這事蠢涝⌒海” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵和二,是天一觀的道長徘铝。 經(jīng)常有香客問我,道長惯吕,這世上最難降的妖魔是什么惕它? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮混埠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诗轻。我一直安慰自己钳宪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布扳炬。 她就那樣靜靜地躺著吏颖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恨樟。 梳的紋絲不亂的頭發(fā)上半醉,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音劝术,去河邊找鬼缩多。 笑死,一個(gè)胖子當(dāng)著我的面吹牛养晋,可吹牛的內(nèi)容都是我干的衬吆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼绳泉,長吁一口氣:“原來是場噩夢啊……” “哼逊抡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起零酪,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤冒嫡,失蹤者是張志新(化名)和其女友劉穎拇勃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孝凌,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡方咆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胎许。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峻呛。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辜窑,靈堂內(nèi)的尸體忽然破棺而出钩述,到底是詐尸還是另有隱情,我是刑警寧澤穆碎,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布牙勘,位于F島的核電站,受9級特大地震影響所禀,放射性物質(zhì)發(fā)生泄漏方面。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一色徘、第九天 我趴在偏房一處隱蔽的房頂上張望恭金。 院中可真熱鬧,春花似錦褂策、人聲如沸横腿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耿焊。三九已至,卻和暖如春遍搞,著一層夾襖步出監(jiān)牢的瞬間罗侯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工溪猿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钩杰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓诊县,卻偏偏與公主長得像榜苫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子翎冲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

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