1. 程式人生 > >Android群英傳——第五章實現滑動的7種方法(四)scrollTo和scrollBy

Android群英傳——第五章實現滑動的7種方法(四)scrollTo和scrollBy

scrollTo()和scrollBy()的區別

  • scrollTo()代表讓View移動到一個具體的座標點:scrollTo(x,y) 移動到(x,y)點
  • scrollBy()則代表橫縱增量:設原點為(a,b),則scrollBy(dx,dy) 後 座標變為(a+dx, b+dy)
  • scrollBy和scrollTo的移動,是移動View的content,即讓View的內容移動(比如listView 地圖控制元件 webview 重要的事情說三種!),如果在viewGroup中使用這兩個方法,則它的子view們將會發生移動
  • 如果是ImageView呼叫了scroll,則drawable就會發生移動
  • scroll方法移動的是ImageView(即window、可視區域),而不是drawable,所以會造成往正方向移動時,drawabe往負方向移動
  • 就像一個放大鏡 在一個地圖上來回的移動(當然它不放大),地圖(drawable)本身是不移動的,移動的是放大鏡(ImageView)
  • 平移是瞬間完成的

    製作了一個簡易的map如下:
    這裡寫圖片描述
    圖片大 所以有點卡

    以下是ImageView的程式碼:

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import
android.widget.ImageView; /** * Created by feathers on 16-11-16. */ public class MapImageView extends ImageView { public MapImageView(Context context) { super(context); } public MapImageView(Context context, AttributeSet attrs) { super(context, attrs); } public
MapImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // 上一個 private int lastX = 0; private int lastY = 0; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int currentX = (int) event.getRawX(); int currentY = (int) event.getRawY(); // 注意, 移動的不是drawable int offsetX = currentX - lastX; int offsetY = currentY - lastY; this.scrollBy(-offsetX, -offsetY); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; } return true; } }
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myapplication.MainActivity">

    <com.example.myapplication.MapImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/map"
        android:scaleType="matrix"/>

</RelativeLayout>

相關推薦

Android群英——實現滑動7方法scrollToscrollBy

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

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

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

Android 實現滑動的幾方法scrollToscrollBy

scrollTo(x,y): 表示移動到一個座標點(x,y) scrollBy(dx,dy) : 表示移動的增量為dx,dy 如果在ViewGroup中使用scrollTo和scrollBy,那麼移

Unity中的基礎光照1

上進 如何 而後 比較 復雜 體積 img 哪裏 distrib 目錄 1. 我們是如何看到這個世界的 1.1 光源 1.2 吸收和散射 1.3 著色 1.

Unity中的基礎光照3

lds 存儲 com code 原理 提醒 詳細 dot mat 目錄 1. 在Unity Shader中實現高光反射光照模型 1.1 實踐:逐頂點光照 1.2 逐像素光照

深入內觀的方法

穩定 photo sig 認識 他會 試驗 是什麽 忘記 謙虛 http://blog.sina.com.cn/s/blog_16697cb1a0102wxh7.html 第三章 深入內觀的方法(一) 歡迎來這裏禪修,非常高興看見你們。我告訴過你們:我所見過最美好

Linux 筆記 - 十三 Linux 系統日常管理之Linux 數據備份工具 rsync 網絡配置

方法 target speed cnblogs rsync -av html links 布爾值 單個 博客地址:http://www.moonxy.com 一、前言 sync 命令是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機間的文件,可以理解為 rem

Java程式設計思想——17 容器深入研究 讀書筆記

九、雜湊與雜湊碼 HashMap使用equals()判斷當前的鍵是否與表中存在的鍵相同。 正確的equals()方法需滿足一下條件: 1)自反性。x.equals(x) 是true; 2)對稱性。x.equalse(y) 返回true y.equals(x)也得是true; 3)傳遞性。x.equals(y)

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

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

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

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

快速學習Spring Data JPA -- JPA多表關聯關係不建議參考

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 關聯關係註解包括@JoinColumn、@OneToOne、@OneToMany、 @ManyToOne、@ManyToMany、@JoinTab

《第一行程式碼》 :全域性大喇叭 筆記基於Android8.0

由於Android8.0對廣播機制做了很大的調整理,導致《第一行程式碼》中很多例項無法正常執行,因此我結合書本,自行整理了一下。 廣播需要接收器和傳送器。系統的動作都會發送一條廣播,例如電量的變化,系

作業-陣列-計算機17級帶詳細解析

解析在下面    解析: p2-1:  可以省略行,但不能省略列,因為總的元素個數已知,如果只知道行數,並無法確定第二維中每一維有多少元素.但如果知道列數,即已知第二維每一維有多少元素,則,

Android群英--對現有控制元件進行拓展動態的文字閃動效果

利用linearGradient Shader和Matrix來實現一個動態的文字閃動效果。 要想實現這一個效果,可以充分利用Android 中Paint物件的Shader渲染器。通過一個不斷變化的linearGradient,並使用帶有該屬性的Paint物件來繪製要顯示的文

《Java從入門到失業》:繼承與多型5.1-5.7:繼承

5.繼承與多型 5.1為什麼要繼承        最近我兒子迷上了一款吃雞遊戲《香腸派對》,無奈給他買了許多玩具槍,我數了下,有一把狙擊槍AWM,一把步槍AK47,一把重機槍加特林(Gatling)。假如我們把這些玩具槍抽象成類,類圖的示意圖大致如下

《Java從入門到失業》:繼承與多型5.8-5.10:多型與Object類

5.8多型      上面我們瞭解了向上轉型,即一個物件變數可以引用本類及子類的物件例項,這種現象稱為多型(polymorphism)。多型究竟有什麼用呢?我們先學習一個知識點。 5.8.1方法重寫       

計蒜客場 UCloud 的安全秘鑰中等 (尺取遊標法

sca http 數組 desc 出現 滿足 說明 tom tor 每個 UCloud 用戶會構造一個由數字序列組成的秘鑰,用於對服務器進行各種操作。作為一家安全可信的雲計算平臺,秘鑰的安全性至關重要。因此,UCloud 每年會對用戶的秘鑰進行安全性評估,具體的評估方法如

4 數據鏈路層4_擴展以太網

style 由於 crc prior 運行 選擇 兩個 需要 指定端口 4. 擴展以太網 4.1 集線器(hub) (1)集線器組網   ①10BASE-T雙絞線以太網的通信距離短,每個站到集線器的距離不超過100m(註意,10表示10Mb/s的數據傳輸率,BASE表示連接

4 數據鏈路層5_高速以太網

網絡 1.3 cell 增加 pan ble 雙工 網段 數據鏈路 5. 高速以太網 5.1 100M以太網 快速以太網(100M)標準 名稱 傳輸介質 網段最大長度 特點 100BASE-TX 銅纜 100m 兩對UTP5類線或屏

數據鏈路層

哪裏 還要 發送 數據鏈路層 這一 都是 簡單 包含 封裝成幀       序言         我是一只菜鳥,又來了。開始今天數據鏈路層的學習吧。