コーディネーターを使って遊び始めましたが、添付画像でその動作を実現しようとしています。バックグラウンド画像をフルサイズスクロールすると、一部のテキストビューが消えてしまい、一部がビューページ(ツールバーレイアウトではなく)の一部として固執するようになりたいのですが、これをどのように達成できますか?私はあなたが特定または一般的な解決をしたい場合はわからないとしてコーディネーターレイアウトを使用してフルスクリーンの画像ビューを折りたたんで、ビューページとヘッダーを置き換えます
答えて
layout_behaviorを使用すると、スクロール時に消えたい文字列を処理できます。あなたが処理したいビューにlayout_behavior:アプリとしてカスタムビューの動作を設定、レイアウトXMLでCoordinatorLayout.Behavior
ViewBehavior.java
public class ViewBehavior extends CoordinatorLayout.Behavior<RelativeLayout> {
private Context mContext;
public ViewBehavior(Context context, AttributeSet attrs) {
mContext = context;
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, RelativeLayout child, View dependency) {
return dependency instanceof AppBarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, RelativeLayout child, View dependency) {
child.measure(View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.AT_MOST));
int maxScroll = ((AppBarLayout) dependency).getTotalScrollRange();
float percentage = Math.abs(dependency.getY())/(float) maxScroll;
float childPosition = dependency.getHeight()
+ dependency.getY()
- child.getMeasuredHeight()
- (getToolbarHeight() - child.getMeasuredHeight()) * percentage/2;
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
child.setLayoutParams(lp);
child.setY(childPosition);
return true;
}
public int getToolbarHeight() {
int result = 0;
TypedValue tv = new TypedValue();
if (mContext.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
result = TypedValue.complexToDimensionPixelSize(tv.data, mContext.getResources().getDisplayMetrics());
}
return result;
}
}
を使用して、ビューの動作をカスタマイズします。
activity_main.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<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/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:id="@+id/llViewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.astuetz.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="48dp"
android:textColor="@color/red"
app:pstsShouldExpand="true"
app:pstsTextAllCaps="true" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.stacktest.ViewBehavior">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginBottom="20dp"
android:layout_marginLeft="36dp"
android:layout_marginTop="20dp"
android:text="Text-1" />
<TextView
android:id="@+id/txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginBottom="20dp"
android:layout_marginRight="36dp"
android:layout_marginTop="20dp"
android:text="Text-2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/txt2"
android:layout_marginBottom="20dp"
android:layout_marginLeft="36dp"
android:paddingRight="20dp"
android:text="Text-3" />
<TextView
android:id="@+id/txt4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/txt2"
android:layout_marginBottom="20dp"
android:layout_marginRight="36dp"
android:text="Text-4" />
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>
最後に、レイアウトを使用して、ActivityクラスにViewPagerとタブを作成します。
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar)).setTitle(" ");
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabsStrip.setViewPager(viewPager);
}
public class MyPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 2;
private String tabTitles[] = new String[] { "Tab1", "Tab2" };
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Fragment getItem(int position) {
return TestFragment.newInstance(position + 1);
}
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
}
}
APPCOMPATとサポートライブラリと一緒にbuild.gradleに次の余分な依存関係を追加します。
- com.android.support:design:23.2.1
- com.astuetz:pagerslidingtabstrip:あなたは、タブを見ることができれば(ViewPagerタブ用)1.0.1
これは*ほぼ*私が必要とするものです! 私はこれを投稿してから読んだチュートリアルでビヘイビアークラスを見ましたが、実際にイメージに適用することはできません。私の質問では、緑の色はイメージ(すなわちscale = fitXY)でなければならず、私はそれをbarlayoutとして「行為」するように縮小したいと思っています。 – crazyPixel
scaleType = fitXYの画像をImageView(android:src)に追加します。削除**
、私はあなたの特定の質問に対する私の解決策を提供するつもりです。鍵はscrollFlags
とcollapseMode
で作業することです。 が本当にの場合、appBarが展開されたときにタブを非表示にしたい場合は、視認性で再生できます。
<?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"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap">
<RelativeLayout
android:layout_marginTop="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="375dp"
android:src="@drawable/ic_launcher"/>
<LinearLayout
android:layout_marginBottom="30dp"
android:layout_below="@+id/image"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="textView1"/>
<TextView
android:layout_marginLeft="140dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="textView2"/>
</LinearLayout>
</RelativeLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/mToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="textView3"/>
<TextView
android:layout_marginLeft="140dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="textView4"/>
</LinearLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="bottom"
android:background="?attr/colorPrimary"
app:tabMode="scrollable"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/tab_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
ありがとうございます。しかし、私はimageviewにmatch_parentを持たせてCollapseingToolbarLayoutの背景にすることをお勧めします。 essentialy collapingtoolbarlayout(上部のbarlayoutを縮小する役割を果たす)のボトム部分のように動作するtouchイベントを持つにはimageviewが必要です – crazyPixel
CollapsingToolbarLayoutの場合、最大の高さを設定する必要があります。必要ならばイメージビューでmatch_parentを設定できますが、イメージビューのレイアウトに高さを設定する必要があります。 touchイベントの場合は、画像にclickListenerを追加して、ツールバーをプログラマブルに閉じます(appBarLayout.setExpanded(true/false))。 –
ここに似たものを得たいですか? http://saulmm.github .io/mastering-coordinator 背景画像ビューのみをフルスクリーンにして、スワイプ可能にします。 onclicklistenerを置くことは、私の問題を解決することはできません。なぜなら、この問題を忌み嫌う私の質問に答えることができないからです。 – crazyPixel
http://d-codepages.com/collapsing-toolbar-android-example/
このリンクはあなたを助ける必要があります。このサンプルプロジェクトで遊ぶことができます。
- 1. onClickListenerを使用した画像ビューの切り替え画像
- 2. ホバーテキストを置き換えて画像に置き換えます
- 3. 画像をクリックして画像に置き換えます
- 4. ユーザーがIPhoneの画像をタップしたときに画像を他の画像に置き換えます。
- 5. 壊れた画像をプレースホルダーの画像で置き換えます
- 6. TWUI:エフェクトを使用してビューを置き換えます
- 7. 画像の緑色のピクセルをjavaを使用して置き換えます。
- 8. 私はブートストラップglyphiconsとCSSで画像を置き換えたい
- 9. リンクまたは画像preg/eregを置き換えますか?
- 10. フックを使用したWoocommerce Shopページの画像の置き換え
- 11. 画像ファイルを新しい画像に置き換えます
- 12. Wordpress - クリックしたときにメイン画像をサムネイルに置き換えます。
- 13. ビューページ内のフラグメントを置き換えることができません
- 14. createbitmapとビューを使用した画像の切り取り
- 15. djangoは古い画像を置き換えていません
- 16. SiFR「折りたたみの上に」コンテンツを置き換えるだけです
- 17. 画像ビュー専用のAndroidビューページ
- 18. Appbarlayoutのビューを折りたたむ/展開できません
- 19. anglejsを使用して1つの画像を別の画像に置き換えます。
- 20. no-thumb.pngで画像を置き換えません
- 21. Fineuploader:アップロードした画像を置き換える方法は?
- 22. JQueryを使用してナビバーの複数の画像を置き換える
- 23. 画像を表示してからアップロードした画像を置き換えます
- 24. アンドロイドのスレッドを使用してビューを折りたたむと拡大する
- 25. デフォルトの画像は最初に取り込まれた画像に置き換えられません
- 26. contenteditable divのkeyupイベントを使用してテキストを画像に置き換える
- 27. ハイチャートをレポート用の画像に置き換えますか?
- 28. jQueryを使用して、選択したテキストを取得したり置き換えたりします。
- 29. 一度画像をフルスクリーンで表示ボタンを押したとき
- 30. モバイルHTMLで画像を別の画像に置き換える
が、それは大丈夫です最初の状態?または、あなたは絶対にそれらを隠したいですか? –
新しいデザインサポートウィジェットBottomSheetを見たことがありますか?BottomSheetを使用してこれを実現できると思います.... – Moinkhan