import android.content.context;
import android.graphics.canvas;
import android.util.attributeset;
import android.util.log;
import android.view.gesturedetector;
import android.view.gesturedetector.ongesturelistener;
import android.view.motionevent;
import android.view.view;
import android.view.viewgroup;
import android.widget.scroller;
public class scollgroup extends viewgroup implements ongesturelistener
public scollgroup(context context)
/*** 設定指示控制器
* @param indicatorcontrol 指示控制器
*/public void setindicatorcontrol(indicatorcontrol indicatorcontrol)
}/**
* 計算每個子控制項的位置
*/@override
protected void onlayout(boolean changed, int l, int t, int r, int b)
}@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
}@override
public boolean onintercepttouchevent(motionevent event)
log.d(tag, "onintercepttouchevent => " + event.getaction());
return true;
}@override
public boolean ontouchevent(motionevent event)
mstatus = touch_status_moving;
mlastposx = mcurrentposx;
mdownposx = x;
case motionevent.action_move:
log.d(tag, "ontouchevent => action_move");
//計算當前滾動到的座標
mcurrentposx = mlastposx + mdownposx - x;
//螢幕第一屏和最後一屏越界不能超過10
mcurrentposx = math.max(
math.min(mcurrentposx, (getchildcount() - 1)
* getmeasuredwidth() + screen_offset), -screen_offset);
// log.d(tag, "mcurrentx = " + mcurrentposx + "; mdownposx = " + mdownposx + "; x = " + x);
scrollto(mcurrentposx, 0);
break;
case motionevent.action_up:
log.d(tag, "ontouchevent => action_up");
//計算當前滾動到的螢幕,如果已觸發fling事件,則不用計算當前螢幕,因為已在onfling事件中計算出來了
if(mstatus != touch_status_fling)
mcurrentscreen = calculatescreen(mcurrentposx);
// log.d(tag, "mcurrentscreen = " + mcurrentscreen);
scrollto(mcurrentscreen);
break;
}return true;
}/**
* 將控制項滾動到指定subview
* @param screenindex
*/public void scrollto(int screenindex)
@override
public void computescroll() else if(mstatus == touch_status_scrolling) }}
/*** 通過當前所在座標計算出螢幕屬於哪一屏
* @param curpos 當前座標
*/private int calculatescreen(int curpos)
return math.min(math.max(0, curscreen), getchildcount() - 1);
}@override
public boolean onfling(motionevent e1, motionevent e2, float velocityx,
float velocityy) else
return false;
}public void requestinvalidate(int width)
@override
public boolean ondown(motionevent e)
@override
public void onshowpress(motionevent e)
@override
public boolean onsingletapup(motionevent e)
@override
public boolean onscroll(motionevent e1, motionevent e2, float distancex,
float distancey)
@override
public void onlongpress(motionevent e)
/*** 指示器控制介面
* @author 鄭澍璋
*/public static inte***ce indicatorcontrol
}
繼承ViewGroup實現Scroll滑動效果
extends viewgroup需要重寫onmeasure和onlayout方法 onmeasure方法是去測量viewgroup需要的大小以及包含的子view需要的大小。執行完上面的方法後,再執行onlayout方法去設定子view的擺放位置。android為我們提供了velocitytrack...
用js實現簡單的點選左右運動
如下圖,點選向右,方塊向右移動,點選向左,方塊向左移動。可以用setinterval來實現過多長時間,div移動多長的距離來實現運動效果。要點一 如果元素的左邊距離小於目標距離,則是正向移動,否則是負向移動 if run.offsetleft 要點二 如果元素的左邊距離等於目標距離,停止定時器,否則...
自定義ViewGroup實現寬度自動換行
自定義viewgroup package com.fenghongzhang.day011 import android.content.context import android.graphics.canvas import android.util.attributeset import an...