آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آموزش ساخت Parallax یا همون collapsing Toolber

خواست خدایی  9 سال پیش  9 سال پیش
+19 0

سلام به همه دوستان

*******************************
من خیلی گشتم و اذیت شدم تا مشکلم حل شد

پس آموزشش رو میزارم که شما نگردین و راحت باشین

*******************************

collapsing toolbar جاهای متفاوتی کاربرد داره و یه شکل زیبایی به نرم افزار میده اگر در جای مناسب ازش استفاده شده باشه
برای اینکه ممکنه بعضی ها آشنا نباشن باهاش پیشنهاد می کنم به کانتکت های واتس اپ برن و یکی از مخاطبین رو انتخاب و به صفحه اون مخاطب برن ( مخاطبی که عکس داشته باشه ) و یه عکس هم این پایین میزارم که ببینین دقیقا چیه



**************************
کامل شد

 برای این سوال 6 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
خواست خدایی  9 سال پیش
+6 0

 پاسخ صحیح

خب برای اینکار اولین کاری که باید انجام بدین باید این باشه که وارد Build.gradle مربوط به app بشین و در وابستگی ها یا همون dependencies خط پایین رو اضافه کنین و بعد sync now رو کلیک کنین
همینجا بگم که خط پایین باعث میشه کتابخونه دیزاین متریال به پروژه اضافه بشه

compile 'com.android.support:design:23.4.0'

خب بعد از این کار وارد xml مربوط به همون لایه ای میشیم که میخوایم درش این toolbar قشنگ رو راه بندازیم و در اولین حرکت نوع لایه رو هر چی که هست به coordinatorLayout تغییر میدیم
شما این رو به جای نام لایه قبلی بزارین

android.support.design.widget.CoordinatorLayout

خب بعد از این که این کار رو کرین نوبت میرسه به اکشن بار
همون طور که در جریان هستین actionbar سابق خیلی چغر و بد بدن بود و کلا کار زیادی نمیشد باهاش کرد تا اینکه تولبار اومد و مشکلات رو حل کرد.
پس ما باید اینجا یه تولبار سفارشی بسازیم
از اونجایی که ما میخوایم اسکرول بر روی تولبار داشته باشیم پس باید از appbarlayout استفاده کنیم و صد البته که کتابخونه دیزاین هم گزینه دیگری بهمون نمیده

از اونجا که توضیح زیاد در مورد اپ بار از حوصله شما و دست من خارجه کسانی که علاقه به دونستن تفاوت appbarlayout و toolbar و چرایی استفاده از اون رو دارن می تونن به اینجا مراجعه کنند.
پس من یه appbar با اون ارتفاعی که دلم میخواد موقع باز بودن باشه ایجاد می کنم.

<android.support.design.widget.AppBarLayout
android:id="@+id/appbarLayout"
android:layout_width="match_parent"
android:layout_height="250dp"
android:fitsSystemWindows="true">
 

ادامه دارد....
دستم درد گرفت :)

+2 0
عالی بود منتظر بقیه ش هستیم . (9 سال پیش)
پاسخ به سوال 
خواست خدایی  9 سال پیش
+2 0

خب بعد از این که Appbarlayout رو ساختیم میریم سراغ coollapsing Toolbar

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

پروپرتی ها  تقریبا مشخصه ولی اگه سوالی بپرسید جواب میدم بهش تو کامنتا
فقط یک نکته بگم که در پروپرتی اسکرول فلگ همیشه اسکرول رو باید داشته باشین
بعد از این کار در خود این تولبار ساخته شده توسط ما باید یه ایمیج ویو بسازیم
همونی که میخوایم اونجا نمایش داده بشه
و از اینجا یه پروپرتی داریم به نام layout_collapseMode که نوع دیده شدن ایمیج رو مشخص می کنه و من دوست دارم pin باشه
اگه شما دوست دارین میتونین عوضش کنین و حتما این کار رو حتما برای تست انجام بدین تا نتیجه رو ببینین
خب اینم imageView

<ImageView
android:id="@+id/picideh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/pic4"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="pin"
/>

خب حالا باید تولبارمون رو بسازیم که بعد از اسکرول شدن قراره دیده بشه
با تولبار هم که آشنایی دارید.
نوع collapseMode تولبار باید parallax باشه. البته این لایه ای که داریم می سازیم  رو هم بعضی ها به همین نام می شناسن و بهش میگن پارالاکس

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="5dp"
android:paddingRight="10dp"
app:layout_collapseMode="parallax">
</android.support.v7.widget.Toolbar>

و اینجاست که collaps toolbar رو می بندیم

</android.support.design.widget.CollapsingToolbarLayout>

اگه دوست داشتین تو این لایه floating Action Button هم داشته باشین که همون بالا رو مرز collaps toolbar باشه
دقیقا جای تعریفش اینجاست

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:backgroundTint="#E91E63"
app:fabSize="normal"
app:layout_anchor="@id/appbarLayout"
android:elevation="600dp"
app:layout_anchorGravity="left|bottom"/>

تقریبا تمام شده کار و حالا باید آخرین کار رو بکنیم و یه ویو بسازیم که با اسکرول شدنش همه چی اسکرول میشه
و طراحی صفحه هم جاش اینجاست
دقت کنین layout_behavior دقیقا جاش همینجاست
یه نکته دیگه اینکه شما وقتی کار می کنین و تایپ می کنین کد ها رو متاسفانه از اندروید استدیویی که استاد دادن ساجستی دریافت نمی کنین و وجود نداره اگه کنترل اسپیس بزنین ولی تو نسخه های بالاتر کتابخونه دیزاین این مشکل برطرف شده. پس دقت کنین که چطور تایپ شده.

<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

خب در آخر یه Linearlayout میسازیم و درون اون طرای هامون رو انجام می دیم.

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:paddingTop="35dp">

<include layout="@layout/card_layout"/>


</LinearLayout>

همونطور که می بینین من دورن این لایه یه لایه دیگه رو اضافه کردم و کارا رو اونجا انجام میدم و شما هم می تونید از کارد ویو استفاده کینی و اگر کردین حتما کتابخونش رو فراموش نکنین اضافه کنین.

compile 'com.android.support:cardview-v7:23.4.0'

خب تموم شد فقط باید لایه رو ببندین

    </android.support.v4.widget.NestedScrollView>


</android.support.design.widget.CoordinatorLayout>

در آخر این کد ها رو کامل برای یه لایه میزارم
و همچنین کد های کارد ویو رو
و بعد از اون کد های جاوا برای دسترسی به تایتل و ایکون برگشت رو
سوالی هم داشتین بپرسین تا جایی که بلد باشم جواب می دم.
کدهای پایین لایه اصلی هستن

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout

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="ir.khastkhodaie.testPageActivity">

<android.support.design.widget.AppBarLayout
android:id="@+id/appbarLayout"
android:layout_width="match_parent"
android:layout_height="256dp"
android:fitsSystemWindows="true">

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<ImageView
android:id="@+id/picideh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/pic4"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="pin"
/>

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="5dp"
android:paddingRight="10dp"
app:layout_collapseMode="parallax">
</android.support.v7.widget.Toolbar>

</android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:backgroundTint="#E91E63"
app:fabSize="normal"
app:layout_anchor="@id/appbarLayout"
android:elevation="600dp"
app:layout_anchorGravity="left|bottom"/>


<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:paddingTop="35dp">

<include layout="@layout/card_layout"/>


</LinearLayout>

</android.support.v4.widget.NestedScrollView>


</android.support.design.widget.CoordinatorLayout>
پاسخ به سوال 
خواست خدایی  9 سال پیش
+1 0

اینم کد های مربوط به کارد ویو که برا تست گذاشتم

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="12dp"
android:background="#acacac">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lorem Ipsum"
android:textSize="20sp"/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Lorem Ipsum dfdfj si nddfj ndjnbnjf,nbfn ndfjgdfjnfnjvns sdjdjngdnjfg ..."
android:textSize="18sp"/>

</LinearLayout>

</android.support.v7.widget.CardView>
پاسخ به سوال 
خواست خدایی  9 سال پیش
+2 0

در مورد کد های جاوا هم یه چیزهایی رو بگم
1. اینکه من لایه ای که ساختم رو تو جاوا مثل فیلد تعریف کردم
2. خودتون یکم با عدد تو کد ها کار کنین و نتیجه رو ببینین
3.من دیکه برگشت رو false کردم و دیده نمیشه شما true کنین و ببینینش و بعد نخواستین برش دارین

final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);


collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbarLayout.setTitle("تیتر صفحه");
collapsingToolbarLayout.setExpandedTitleMarginEnd(65);
collapsingToolbarLayout.setExpandedTitleMarginBottom(10);

collapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
collapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);

فقط یادتون نره تولبار رو تعریف کنین اون بالا

private CollapsingToolbarLayout collapsingToolbarLayout = null;
+1 0
امیدوارم به درد دوستان بخوره به هر حال - موفق باشین (9 سال پیش)
+2 0
ممنون از آموزش کاربردی قشنگنت، اگه میشه از خروجی کارت یه اسکرین شات بزار ما بقی هم ببیننش :-) (9 سال پیش)
+1 0
سلام پیشنهاد خوبیه حتما اینکار رو خواهم کرد. اگه چرا تست بوده ولی فکر خوبیست. حتما این کار رو می کنم. (9 سال پیش)
پاسخ به سوال 
خواست خدایی  9 سال پیش
+2 0

اینم نمونه ای که ایجاد میشه برا دوستانی که می خواستن خروجی ببینن

پاسخ به سوال 
SaeiD-as  9 سال پیش
0 0

سلام

ببخشید زمانی که می خوام گریدل رو سینک کنم این ارور رو می گیرم، بنظرتون مشکلش کجاست؟

فایل build.gradle من به این شکله:

apply plugin: 'com.android.application'

android {
compileSdkVersion 16
buildToolsVersion "24.0.1"

defaultConfig {
applicationId "com.app.parallax"
minSdkVersion 8
targetSdkVersion 8
}

buildTypes {
release {
minifyEnabled true
proguardFiles 'proguard.cfg'
}
}
}

dependencies {
compile 'com.android.support:appcompat-v7:18.0.0'
compile 'com.android.support:recyclerview-v7:21.0.+'
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:design:23.4.0'
}


ویرایش:
 

گزینه

compileSdkVersion 16

رو تغییر دادم به

compileSdkVersion 23

مشکلش حل شد :) فقط سوالی که می مونه اینه که الآن که این تغییر رو دادم پروژه ام چه تغییری می کنه؟ روی ورژن‌های پایینتر از 23 جواب میده یا نه؟

0 0
باید فایلی بسازم؟ یا اینکه مشکل دیگه ای داره؟ (9 سال پیش)
+1 0
اون دیفالت کانفیگ رو به دلیل خاصی اضافه کردین؟ برا پارالاکس فقط کتابخونه دیزاین کفایت میکنه ورژنی که براش مینویسی اندروید 2.2 هست؟ (9 سال پیش)
0 0
من پروژه رو از اکلیپس ایمپورت کردم، و این خودش اضافه شده، اون targetSdkVersion رو به 23 تغییر دادم ولی باز هم تغییری نکرد! (9 سال پیش)
0 0
وقتی build رو میزنم این صفحه values-ldltr-v21.xml باز میشه و این ارور ها میان! (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .