掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在Android開發(fā)中,經(jīng)常會遇到一個view需要它能夠支持滑動的需求。今天就來總結(jié)實現(xiàn)其滑動的六種方法。其實每一種方法的思路都是一樣的,即:監(jiān)聽手勢觸摸的坐標來實現(xiàn)view坐標的變化,從而實現(xiàn)view的滑動效果。

為遵義等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及遵義網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站建設、網(wǎng)站建設、遵義網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
如果你將滑動后的目標位置的坐標傳遞給Layout,這樣子就會把view的位置給重新布置了一下,在視覺上就是view的一個滑動的效果。
這就是利用Layout方法實現(xiàn)滑動的核心思路。我們來看一下代碼:
新建項目,然后自定義一個view,代碼如下:
package com.example.testdragview;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class DragView extends View{
private int lastX;
private int lastY;
public DragView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public DragView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DragView(Context context) {
super(context);
}
public boolean onTouchEvent(MotionEvent event) {
// Log.d("付勇焜----->","TouchEvent");
// Log.d("付勇焜----->",super.onTouchEvent(event)+"");
//獲取到手指處的橫坐標和縱坐標
int x = (int) event.getX();
int y = (int) event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
lastX = x;
lastY = y;
break;
case MotionEvent.ACTION_MOVE:
//計算移動的距離
int offX = x - lastX;
int offY = y - lastY;
//調(diào)用layout方法來重新放置它的位置
layout(getLeft()+offX, getTop()+offY,
getRight()+offX , getBottom()+offY);
break;
}
return true;
}
}
核心代碼就是onTouchEvent方法了。代碼很簡單,無非就是記錄手指的上次坐標與下次坐標,然后將前后移動的增量傳遞給layout方法而已。
值得注意的是,onTouchEvent的返回值為true,表示我們要成功消化掉這個觸摸事件。
然后再修改activity_main.xml的代碼,將這個view裝到布局里,如下:
現(xiàn)在來運行程序。效果如下:
效果還可以吧。可以自由的滑動了。
其實上面我們用getX()和getY()獲得的是在視圖坐標系中的值。其實我們也可以使用絕對坐標,即使用getRawX()和getRawY()獲得的值
來實現(xiàn)這個滑動效果。修改DragView中的onTouchEvent中的代碼,如下所示:
1 6 7 11 12
一定注意,此時不同的是,在move過程中,我們要及時改變lastX,與lastY的值來獲取正確的之前坐標(因為是在Android坐標系嘛,用的是絕對距離)。
此時再次運行程序,效果跟上圖一樣。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流