Android 에서 Activity 슬라이딩 종료 효과
12415 단어 androidactivity슬라이딩 클 로 징
프로젝트 주소:https://github.com/xinyitiandi/SlidingFinishDemo
상위 코드:
1.첫 번 째 액 티 비 티:
package com.ekeguan.slidingfinishdemo;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initEventListener();
}
private void initView() {
button = (Button) findViewById(R.id.button);
}
private void initEventListener() {
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId())
{
case R.id.button:
startActivity(new Intent(MainActivity.this,SecondActivity.class));
break;
default:
break;
}
}
}
레이아웃 파일:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ekeguan.slidingfinishdemo.MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Activity"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
2.두 번 째 액 티 비 티,즉 점프 할 목표 액 티 비 티
package com.ekeguan.slidingfinishdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
private SildingFinishLayout mSildingFinishLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();
initEventListener();
}
private void initView() {
mSildingFinishLayout = (SildingFinishLayout) findViewById(R.id.sildingFinishLayout);
mSildingFinishLayout.setTouchView(mSildingFinishLayout);
}
private void initEventListener() {
mSildingFinishLayout
.setOnSildingFinishListener(new SildingFinishLayout.OnSildingFinishListener() {
@Override
public void onSildingFinish() {
finish();
}
});
}
}
레이아웃 파일:
<?xml version="1.0" encoding="utf-8"?>
<com.ekeguan.slidingfinishdemo.SildingFinishLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sildingFinishLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f0f0f0">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Activity"
android:layout_gravity="center"
android:textColor="#000"/>
</FrameLayout>
</com.ekeguan.slidingfinishdemo.SildingFinishLayout>
메모:사용자 정의 레이아웃 인 Silding Finish Layout 를 사 용 했 습 니 다.이 레이아웃 에 대한 코드 는 제 가 잠시 후에 아래 에 붙 일 테 니 조급해 하지 마 세 요.주의해 야 할 것 은 미 끄 러 지고 닫 으 려 는 Activity 의 레이아웃 파일 의 맨 바깥쪽 은 Silding FinishLayout 레이아웃 으로 감 싸 고 Silding FinishLayout 에 감 싸 인 안의 레이아웃 은 배경 색 을 설정 하 는 것 입 니 다.예 를 들 어 FrameLayout 와 같이 저 는 배경 색 을'\#f0f0f 0 f0'으로 설 치 했 습 니 다.글꼴 은 TextView 와 같이'\#000'을 설 치 했 습 니 다.이상 적 인 효 과 를 얻 기 위해 AndroidMainfest.xml 파일 에 손짓 으로 미 끄 러 지 려 는 Activity 에 투명 한 테 마 를 추가 해 야 합 니 다.예 를 들 어:
<activity android:name=".SecondActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent"></activity>
테마:
<style name="Theme.AppCompat.Translucent">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
자,여기까지 차이 가 많 지 않 습 니 다.다음은 사용자 정의 레이아웃 Silding Finish Layout 코드 를 붙 입 니 다.
package com.ekeguan.slidingfinishdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.Scroller;
/**
* RelativeLayout, IOS ,
* , Activity SildingFinishLayout,
* setTouchView() View
*
* @author xiaanming
*
* @blog http://blog.csdn.net/xiaanming
*
*/
public class SildingFinishLayout extends RelativeLayout implements
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();
}
}
마지막 항목 주소:https://github.com/xinyitiandi/SlidingFinishDemo위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 에서 Activity 슬라이딩 이 꺼 지 는 효과 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.