关于Activity向右滑动销毁的具体实现

在Android开发中,我们可能不喜欢Activity简单的退出方式,喜欢那种屏幕随手指滑动而滑动,当全部滑出时就销毁Activity,在很多的应用中都做了类似的使用,它使应用的用户体验更好。

当然,我也想把这个东西加到自己的应用上面去,不过因为自己不会啊,看了几本书,上面都没有,只有最简单的销毁方式,一段时间我都没有在接触它了。但是,还是出现了转折点,我知道了一个网站“CSDN”,这可能就是命运的转折点吧,我在这个网站里找到的资源简直不能用多来形容了。。。。额额额,有点偏题了,好吧,我就打个广告,学IT的如果不知道CSDN,他比别人会多走好多的弯路啊。

好了,在CSDN里面我找到了许多关于Activity滑动销毁的源代码,当然有几个我都看不懂,但是还是让我找到了一个能看懂的,并且自己做了一个Demo,测试没有问题,所以就拿出来给大家分享。

先给大家看一下效果图吧:


手指滑动,屏幕跟着滑动,最后Activity销毁。

在实现这个功能之前,我们需要做一些了解,确保你有实现这个功能的基础。

<1>.掌握Android开发的基本基础

<2>.对布局有深刻的认识

<3>.对Activity切换有一定的了解

<4>.对动画有一定的了解

好了,需要具备这些基础,你才可以实现这个功能,否则很难实现,需要看一些基础了。

这个功能的实现需要的只是一个类,对,只是一个类。但是,我没有时间去明白这个类,我所会的只是知道怎么去使用这个类来实现功能。比如说,Android提供了ListView和Adapter,你只是知道如何使用ListView来Adapter就可以做出列表界面,而不需要知道为什么可以做到,因为封装的很好嘛。

说了这么多,该进入正题了:

这个类是SildingFinishLayout,没错,看这个类的名字我们就可以知道它是在XML布局文件中使用的,就像自己自定义的View一样在XMl中使用,它的使用如下:

PS:这个类不是Android提供的,是别人自己写的。

<com.example.activitytest.SildingFinishLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#060034"
    tools:context=".MainActivity" >
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        >
        <Button
            android:id="@+id/btn" 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="打开SecondActivity"
            />
    </LinearLayout>
    
</com.example.activitytest.SildingFinishLayout>

如上面的XML代码所示,这样就使用了这个类,不过需要注意的是,这个类的父类是RelativeLayout,我本人不太喜欢使用RelativeLayout, 所以我就用了LinearLayout来充满整个布局,转换到我喜欢的布局O(∩_∩)O哈哈~

在这个布局文件里面,有一个按钮,点击它就会打开第二个Activity,对它点击响应的函数为:

public void openSecondActivity(View v){
		startActivity(new Intent(this,SecondActivity.class));
		overridePendingTransition(R.anim.base_slide_right_in,
				R.anim.base_slide_remain);
	}

看这个函数,它是实现了由MainActivity跳转到SecondActivity,startActivity这个函数就不用说了,大家都知道,overridePending这个函数大家也知道,关键是里面的动画资源:

base_slide_right_in:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="300"
        android:fromXDelta="100.0%"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0.0%" />

</set>
这个就是Activity启动时,从屏幕的右边进入,我就不做过多的解释了。

base_slide_remain:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0" />

</set>

这个就是当前Activity跳转到另一个Activity时,当前动画是不动,大家看代码就明白什么意思了。

给大家看一下SecondActivity.java的代码,里面包括了实现了细节:

public class SecondActivity extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		
		SildingFinishLayout mSildingFinishLayout = (SildingFinishLayout) findViewById(R.id.second_layout);
		mSildingFinishLayout
				.setOnSildingFinishListener(new OnSildingFinishListener() {

					@Override
					public void onSildingFinish() {
						SecondActivity.this.finish();
					}
				});
	}
	public void openMainActivity(View v){
		startActivity(new Intent(this,MainActivity.class));
		overridePendingTransition(R.anim.base_slide_right_in,
				R.anim.base_slide_remain);
	}
	
	@Override
	public void onBackPressed() {
		super.onBackPressed();
		overridePendingTransition(0, R.anim.base_slide_right_out);
	}
}

大家需要注意的就是在OnCreate函数中SlideFinishLayout生成对象然后绑定事件,这个事件就是对手指滑动的响应.setOnSildingFinishListener是SlideFinishLayout中定义的方法,函数原型大家可以去看它的代码,不过,会用也就行了,这样,我们就基本实现了,不过还是不能运行,当运行的时候,结果和我们想要的还是有很大的差别,我当时就懵逼了O(∩_∩)O哈哈~不过我还是将它改过来了,能实现了。

原来问题出在AndroidManifest.xml配置文件中,我们在该文件中配置Activity的时候,如下:

<activity 
            android:name="com.example.activitytest.SecondActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            >
</activity>
记得要把theme属性设置成Theme.Translucent,至于为什么,大家查查单词的意思也就明白了。

好了,至此,这个简单的功能也就实现了,真的很简单,当时怎么就不会呢。

我总结一下实现的过程:

<1>.在XML布局文件中使用SlideFinishLayout(注意它是RelativeLayout的子类)

<2>.在OnCreate中生成SlideFinishLayout的对象,绑定事件(死代码,基本不变,可直接套用)

<3>.在配置文件里面配置Activity,theme属性设置成Theme.Translucent。(明白单词的意思了吗?)

好了,这样就可以加入这个功能了。

有兴趣的大家可以私聊我,也可以关注我的博客(http://blog.csdn.net/programchangesworld/)

源代码:点击下载






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值