乙個可拖動的ScrollView

2021-07-25 11:32:57 字數 3027 閱讀 8746

我們經常看到這樣的效果,乙個listview和gridview亦或者是recycleview,再上拉或下拉到頂部的時候,還能再拖拽一段距離,這種效果是是非常常見的,因為用的比較多,所以記錄一下.

實現思路是自定義乙個scrollview:

具體**如下

package fenganoschina.fenganoschina;

import android.annotation.suppresslint;

import android.content.context;

import android.graphics.rect;

import android.util.attributeset;

import android.view.motionevent;

import android.view.view;

import android.view.animation.translateanimation;

import android.widget.listview;

import android.widget.scrollview;

/** * 可以拖動的scrollview

*/public

class

customerscrollview

extends

scrollview

public

customerscrollview(context context, attributeset attrs)

@override

protected

void

onfinishinflate()

}@suppresslint("clickableviewaccessibility")

@override

public

boolean

ontouchevent(motionevent ev) else

return

super.ontouchevent(ev);

}public

void

commontouchevent(motionevent ev)

break;

case motionevent.action_move:

final

float prey = y;

float nowy = ev.gety();

/*** size=4 表示 拖動的距離為螢幕的高度的1/4

*/int deltay = (int) (prey - nowy) / size;

// 滾動

// scrollby(0, deltay);

y = nowy;

if (isneedmove())

int yy = inner.gettop() - deltay;

// 移動布局

inner.layout(inner.getleft(), yy, inner.getright(),

inner.getbottom() - deltay);

}break;

default:

break;}}

public

void

animation()

public

boolean

isneedanimation()

public

boolean

isneedmove()

return

false;}}

布局檔案

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/lv"

android:layout_width="match_parent"

android:layout_height="wrap_content">

com.fengan.listviewforsc>

com.fengan.customerscrollview>

relativelayout>

需要注意的是:因為涉及到scrollview和listview的巢狀,會導致listview上顯示資料不完全

可以簡單的自定義listview**:

(具體見上篇

**如下:

import android.content.context;

import android.util.attributeset;

import android.widget.listview;

/** * created by fengan on 2016/12/19.

*/public

class

listviewforsc

extends

listview

public

listviewforsc(context context, attributeset attrs, int defstyleattr)

public

listviewforsc(context context, attributeset attrs)

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

}

是不是很簡單呢

用JS指令碼做乙個可拖動的對話方塊

用 js指令碼做乙個可拖動的對話方塊 左直拳一 可拖動 關鍵是能跟蹤滑鼠座標的變化,從而不斷修正對話方塊的座標。假設待移動的對話方塊為 objmove 則有 px event.x objmove.style.pixelleft py event.y objmove.style.pixeltop 其中...

自定義View上(做乙個可拖動的控制項)

布局 xml version 1.0 encoding utf 8 android.support.constraint.constraintlayoutxmlns android xmlns xmlns tools android layout width match parent android...

用JS指令碼做乙個可拖動的對話方塊

用js指令碼做乙個可拖動的對話方塊 左直拳一 可拖動 關鍵是能跟蹤滑鼠座標的變化,從而不斷修正對話方塊的座標。假設待移動的對話方塊為objmove,則有 px event.x objmove.style.pixelleft py event.y objmove.style.pixeltop 其中pi...