안 드 로 이 드 는 Activity 를 왼쪽 으로 미 끄 러 뜨리 는 완벽 한 패 키 징 을 실현 합 니 다.
public class SildingFinishLayout extends RelativeLayout implements View.OnTouchListener {
/**
* SildingFinishLayout
*/
private ViewGroup mParentView;
/**
* View
*/
private View touchView;
/**
*
*/
private int mTouchSlop;
/**
* X
*/
private int downX;
/**
* Y
*/
private int downY;
/**
* X
*/
private int tempX;
/**
*
*/
private Scroller mScroller;
/**
* SildingFinishLayout
*/
private int viewWidth;
/**
*
*/
private boolean isSilding;
private OnSildingFinishListener onSildingFinishListener;
private boolean isFinish;
public SildingFinishLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SildingFinishLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mScroller = new Scroller(context);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (changed) {
// SildingFinishLayout
mParentView = (ViewGroup) this.getParent();
viewWidth = this.getWidth();
}
}
/**
* OnSildingFinishListener, onSildingFinish() finish Activity
*
* @param onSildingFinishListener
*/
public void setOnSildingFinishListener(
OnSildingFinishListener onSildingFinishListener) {
this.onSildingFinishListener = onSildingFinishListener;
}
/**
* Touch View
*
* @param touchView
*/
public void setTouchView(View touchView) {
this.touchView = touchView;
touchView.setOnTouchListener(this);
}
public View getTouchView() {
return touchView;
}
/**
*
*/
private void scrollRight() {
final int delta = (viewWidth + mParentView.getScrollX());
// startScroll , computeScroll() scrollTo item
mScroller.startScroll(mParentView.getScrollX(), 0, -delta + 1, 0,
Math.abs(delta));
postInvalidate();
}
/**
*
*/
private void scrollOrigin() {
int delta = mParentView.getScrollX();
mScroller.startScroll(mParentView.getScrollX(), 0, -delta, 0,
Math.abs(delta));
postInvalidate();
}
/**
* touch View AbsListView, ListView, GridView
*
* @return
*/
private boolean isTouchOnAbsListView() {
return touchView instanceof AbsListView ? true : false;
}
/**
* touch view ScrollView
*
* @return
*/
private boolean isTouchOnScrollView() {
return touchView instanceof ScrollView ? true : false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = tempX = (int) event.getRawX();
downY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int moveX = (int) event.getRawX();
int deltaX = tempX - moveX;
tempX = moveX;
if (Math.abs(moveX - downX) > mTouchSlop
&& Math.abs((int) event.getRawY() - downY) < mTouchSlop) {
isSilding = true;
// touchView AbsListView,
// , item , item
if (isTouchOnAbsListView()) {
MotionEvent cancelEvent = MotionEvent.obtain(event);
cancelEvent
.setAction(MotionEvent.ACTION_CANCEL
| (event.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
v.onTouchEvent(cancelEvent);
}
}
if (moveX - downX >= 0 && isSilding) {
mParentView.scrollBy(deltaX, 0);
// ListView ScrollView
if (isTouchOnScrollView() || isTouchOnAbsListView()) {
return true;
}
}
break;
case MotionEvent.ACTION_UP:
isSilding = false;
if (mParentView.getScrollX() <= -viewWidth / 2) {
isFinish = true;
scrollRight();
} else {
scrollOrigin();
isFinish = false;
}
break;
}
// touch view AbsListView ScrollView
// AbsListView, ScrollView
if (isTouchOnScrollView() || isTouchOnAbsListView()) {
return v.onTouchEvent(event);
}
// true
return true;
}
@Override
public void computeScroll() {
// startScroll scroller.computeScrollOffset() true,
if (mScroller.computeScrollOffset()) {
mParentView.scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();
if (mScroller.isFinished()) {
if (onSildingFinishListener != null && isFinish) {
onSildingFinishListener.onSildingFinish();
}
}
}
}
public interface OnSildingFinishListener {
public void onSildingFinish();
}
}
2.AcitityActivity 의 onCreate()방법 에서
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
SildingFinishLayout mSildingFinishLayout = (SildingFinishLayout) findViewById(R.id.timed_task_SildingFinishLayout);
mSildingFinishLayout
mSildingFinishLayout .setOnSildingFinishListener(new SildingFinishLayout.OnSildingFinishListener() {
@Override
public void onSildingFinish() {
finish();
}
});
mSildingFinishLayout .setTouchView(mSildingFinishLayout);// : activity view
}
지금까지 이 기능 은 이미 실현 되 었 다.문제 해결:이것 은 왼쪽 미끄럼 배경 흰색 문제 가 발생 할 수 있 습 니 다.
1.style.xml 에 추가
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
2.acvitiy 의 속성 에
android:theme="@style/AppTheme"
3 일부 속성의 상세 한 해석
<item name="android:windowFrame">@null</item> :Dialog windowFrame
<item name="android:windowIsFloating">true</item>: activity
<item name="android:windowIsTranslucent">false</item>:
<item name="android:windowNoTitle">true</item>: title
<item name="android:windowBackground">@drawable/dia_bg</item>: dialog
<item name="android:backgroundDimEnabled">false</item>:
안 드 로 이 드 가 왼쪽 슬라이더 를 실현 하고 Activity 를 종료 하 는 완벽 한 패키지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 안 드 로 이 드 왼쪽 슬라이더 를 종료 하 는 Activity 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.