我是
Android世界的新手.我想在我的应用程序中添加一些视差背景效果.
我该怎么做?如何在Android中实现这一目标?
是否有任何有效的方法来创建2-3层视差背景? Android API中是否有一些工具或类?
我正在使用API级别19.
我试图理解Paralloid库,但是这个太大了,无法解释.我是Android和Java的新手,我不熟悉所有Layouts和其他UI对象,但我熟悉MVC.
我开始赏金,也许有人可以一步一步解释这个图书馆是如何运作的.
解决方法
这是你可以做的:
在您的活动/片段布局文件中,指定2个ScrollView(例如background_sv和content_sv).
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" > <com.example.parallax.MyScrollView android:id="@+id/background_sv" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/parallax_bg" android:layout_width="match_parent" android:layout_height="match_parent" android:background="..." /> </com.example.parallax.MyScrollView> <com.example.parallax.MyScrollView android:id="@+id/content_sv" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> </com.example.parallax.MyScrollView> </RelativeLayout>
在背景高度的内容滚动视图中添加虚拟视图并使其透明.现在,将滚动侦听器附加到content_sv.滚动内容滚动视图时,请调用
mBgScrollView.scrollTo(0,(int)(y /*scroll Of content_sv*/ / 2f));
现有的API不支持获取滚动事件.
因此,我们需要创建一个Custom ScrollView来提供ScrollViewListener.
package com.example.parallax; // imports; public class MyScrollView extends ScrollView { public interface ScrollViewListener { void onScrollChanged(MyScrollView scrollView,int x,int y,int oldx,int oldy); } private ScrollViewListener scrollViewListener = null; public MyScrollView(Context context) { super(context); } public MyScrollView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs,defStyle); } public MyScrollView(Context context,AttributeSet attrs) { super(context,attrs); } public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } @Override protected void onScrollChanged(int x,int oldy) { super.onScrollChanged(x,y,oldx,oldy); if(scrollViewListener != null) { scrollViewListener.onScrollChanged(this,x,oldy); } } }
这是托管内容ScrollView和后台ScrollView的活动
package com.example.parallax; // imports; public class ParallaxActivity extends Activity implements ScrollViewListener { private MyScrollView mBgScrollView; private MyScrollView mContentScrollView; @Override public void onCreate(Bundle savedInstanceState) { mBgScrollView = findViewById(R.id.background_sv); mContentScrollView = findViewById(R.id.content_sv); mContentScrollView.setOnScrollListener(this); } // this is method for onScrollListener put values according to your need @Override public void onScrollChanged(MyScrollView scrollView,int oldy) { super.onScrollChanged(scrollView,oldy); // when the content scrollview will scroll by say 100px,// the background scrollview will scroll by 50px. It will // look like a parallax effect where the background is // scrolling with a different speed then the content scrollview. mBgScrollView.scrollTo(0,(int)(y / 2f)); } }