1. 程式人生 > >Android群英傳——第五章實現滑動的7種方法(一二三)

Android群英傳——第五章實現滑動的7種方法(一二三)

實現滑動的基本思想:

  • 當觸控View時,系統記下當前的座標
  • 當手指移動時,系統記下當前移動點的座標
  • 從而獲取了一個偏移量
  • 通過這個偏移量修改這個View的座標
  • 即可實現滑動的過程

    要實現的效果如下:
    這裡寫圖片描述

方法一:layout方法

直接採用了基本思想:

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;

/**
 * Created by feathers on 16-11-15.
 */
public class MyView extends ImageView { private int downX; private int downY; public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } public MyView(Context context, AttributeSet attrs, int
defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 1. 記錄按下時的座標 downX = (int) event.getRawX(); downY = (int
) event.getRawY(); break; case MotionEvent.ACTION_MOVE: // 2. 獲取發生移動時的座標 int moveX = (int) event.getRawX(); int moveY = (int) event.getRawY(); // 3. 獲取偏移量 int offsetX = moveX - downX; int offsetY = moveY - downY; Log.i("logi", "offsetX" + offsetX); Log.i("logi", "offsetY" + offsetY); Log.i("logi", "offsetX + getLeft" + offsetX + getLeft()); Log.i("logi", "offsetY + getTop" + offsetY + getTop()); // 4. 重新為view佈局 this.layout(getLeft()+offsetX, getTop()+offsetY, getRight()+offsetX, getBottom()+offsetY); // 初始化downX和Y,以方便下次計算偏移量 // 注意:這個偏移量第一次是按下與移動的差值,而第二次往後就是上次移動的和當前的位置的差值 downX = (int) event.getRawX(); downY = (int) event.getRawY(); break; } return true; } }

方法二:offsetLeftAndRight()和offsetTopAndBottom()

這是Android系統為我們提供的已經封裝好的API,主要用於左右和上下移動
重要程式碼如下:

 // 4. 重新為view佈局
 this.layout(getLeft()+offsetX,
    getTop()+offsetY,
    getRight()+offsetX,
    getBottom()+offsetY);               

替換為

offsetLeftAndRight(offsetX);
offsetTopAndBottom(offsetY);

即可

方法三:LayoutParams

設定LayoutParams,修改leftmargin和topmargin屬性,從而完成滑動
注意:
1. View的LayoutParams與父ViewGroup有關,如果父控制元件是LinearLayout,則必須使用LinearLayout.LayoutParams(或者直接使用ViewGroup.LayoutParams)
2. leftMargin和topMargin是相對與父控制元件的值,如果父控制元件中設定了padding,則offset的計算也要對padding進行處理,否則出現異常

同上一個方法相同只需替換第4步為以下程式碼即可:

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();
                layoutParams.leftMargin = getLeft() + offsetX;
                layoutParams.topMargin = getTop() + offsetY;
                this.setLayoutParams(layoutParams);

相關推薦

Android群英——實現滑動7方法(一二)

實現滑動的基本思想: 當觸控View時,系統記下當前的座標 當手指移動時,系統記下當前移動點的座標 從而獲取了一個偏移量 通過這個偏移量修改這個View的座標 即可實現滑動的過程 要實現的效果如下: 方法一:layout方法 直接採用了基本思想:

Android群英——實現滑動7方法(四)scrollTo和scrollBy

scrollTo()和scrollBy()的區別 scrollTo()代表讓View移動到一個具體的座標點:scrollTo(x,y) 移動到(x,y)點 scrollBy()則代表橫縱增量:設原點

編譯器實現之旅—— 實現語法分析器前的準備

在前面的旅程中,我們已經實現了詞法分析器。詞法分析器可將原始碼轉變為記號流,以供語法分析器使用。所以現在就讓我們啟程,朝著下一站——語法分析器出發吧。 ## 1. 什麼是語法 什麼是語法呢?提到詞法分析器,我們能夠立即聯想到一個個看得見摸得著的詞;而提到語法分析器,又能聯想到什麼呢? 詞法和語法的關係,

算法入門經典- 例題5-7 醜數

space names logs ins 是否 判斷 pop spa esp #include<iostream> #include<vector> #include<queue> #include<set> using n

運輸層(UDP和TCP次握手,四次揮手分析)

    序言         通過這章,可以知道其實三次握手和四次揮手其實真的好簡單,通過這章的學習,我相信你也會同樣的認為,以後在也不需要聽到別人問三次握手的過程而自己一臉懵逼了,覺得人家好屌,其實也就是他懂你不懂,僅此而已,不懂就去學。學了你就會覺得其實也就那樣,沒有什麼厲害的,這讓我回想以前剛學習程式設

Android群英:神兵利器》—

《Android群英傳:神兵利器》個人讀書筆記,僅做學習記錄之用 第五章:深藏功與名的開發者工具 5.1 AAPT 5.1.1 AAPT 初探 AAPT——Android Asset Packaging Tool。在 Android SDK 的 build-too

Android群英知識點回顧——Android系統信息與安全機制

class 以及 包名 bug 也有 不同的 ger class文件 訪問權限控制 9.1 Android系統信息獲取 9.1.1 android.os.Build 9.1.2 SystemProperty 9.1.3 Android系統信息實例

Android群英知識點回顧——Android繪圖機制與處理技巧

ride ets 常用 結合 管理 一個 sla 浮雕效果 調用 6.1 屏幕的尺寸信息 6.1.1 屏幕參數 6.1.2 系統屏幕密度 6.1.3 獨立像素密度dp 6.1.4 單位轉換 6.2 2D繪圖基礎 6.3 Android X

實現滑動的七方法(Android群英)

內容是博主照著書敲出來的,博主碼字挺辛苦的,轉載請註明出處,後序內容陸續會碼出。   當了解了Android座標系和觸控事件後,我們再來看看如何使用系統提供的API來實現動態地修改一個View的座標,即實現滑動效果。而不管採用哪一種方式,其實現的思想基本是一致

Android群英:神兵利器》—

《Android群英傳:神兵利器》個人讀書筆記,僅做學習記錄之用 第四章:與 Gradle 的愛恨情仇         Gradle 使用的是 DSL 語言,即領域特定語言 4.1 如何學習 Gradle 4.2 Gradle 初探 4.2.1 專案全域性 bu

Android群英讀書筆記——十三Android例項提高

第十三章目錄 13.1 移動迷宮——拼圖遊戲 13.1.1 準備工作 13.1.2 初始介面 13.1.3 拼圖介面 13.1.4 效果預覽與功能進階 13.2 魔幻矩陣——2048 13.2.1 2048概述 13.2.2 2048遊戲分析 13.2.3

Android群英學習——Android動畫機制與使用技巧

動畫能夠讓互動更加友好,特別是在提示、引導類的場景中,合理的使用動畫能讓使用者獲得更加愉悅的使用體驗。 學習本章,我們將瞭解到以下內容: ●Android檢視動畫 ●Android屬性動畫 ●Android動畫例項 一、Android View動畫框架

Android群英:神兵利器》—

《Android群英傳:神兵利器》個人讀書筆記,僅做學習記錄之用 第三章:Android Studio 奇技淫巧 3.1 Android Studio 使用初探 3.2 Android Stu

閱讀徐宜生《Android群英》的筆記——3 Android控制元件架構與自定義控制元件詳解(3.6-3.8)

3.6 自定義 View 在自定義 View 時,我們通常會去重寫 onDraw() 方法來繪製 View 的顯示內容。如果該 View 還需要使用 wrap_content 屬性,那麼還必須重寫 onMeasure() 方法。另外,通過自定義 attr

Android群英讀書筆記——Android效能優化

第十章目錄 10.1 佈局優化  10.1.1 Android UI渲染機制 10.1.2 避免Overdraw 10.1.3 優化佈局層級 10.1.4 避免巢狀過多無用佈局 10.1.5 Hierarchy Viewer 10.2 記憶體優化

閱讀徐宜生《Android群英》的筆記——4 ListView 使用技巧——剩下部分

4.1.8 處理空 ListView ListView 用於展示列表資料,但當列表中無資料時,ListView 不會顯示任何資料或提示,按照完善使用者體驗的需求,這裡應該給以無資料的提示。幸好,ListView 提供了一個方法 —— setEmptyView

Android群英讀書筆記——Android動畫機制與使用技巧

第七章目錄 7.1 Android View動畫框架  7.1.1 透明度動畫 7.1.2 旋轉動畫 7.1.3 位移動畫 7.1.4 縮放動畫 7.1.5 動畫集合 7.2 Android屬性動畫分析  7.2.1 ObjectAnimato

Android群英讀書筆記——十二Android 5.X新特性詳解

第十二章目錄 12.1 Android5.X UI設計初步  12.1.1 材料的形態模擬 12.1.2 更加真實的動畫 12.1.3 大色塊的使用 12.2 Material Design主題 12.3 Palette 12.4 檢視與陰影 12

Android群英讀書筆記——Android系統資訊與安全機制

第九章目錄 9.1 Android系統資訊獲取  9.1.1 android.os.Build 9.1.2 SystemProperty 9.1.3 Android系統資訊例項 9.2 Android Apk應用資訊獲取之PackageManager 

Android課程設計天歡迎界面(滑動

col color oncreate apt cli ctsc star .cn ges 註意:課程設計只為完成任務,不做細節描述~ 滑動界面 1 package com.example.myapplication; 2 3 import android