私は zomato アプリでフィルターのようなものを実装しようとしています。フィルターを選択すると、最初の画面が移動し、最初の画面の一部のみが表示され、2 番目の画面全体が表示され、選択するとすべてのフィルターの種類を選択できます。最初の画面と 2 番目の画面の両方を移動した後のフィルターの種類。
私がやったことは、内側の画面 (フィルター タイプとフィルター オプション) を非表示の 2 つの相対的なレイアウトとして使用し、それらをスライドさせて、レイアウト パラメーターの余白を変更し、レイアウトを要求することで表示できるようにすることです。
3 番目の画面 (フィルター オプション) を表示している間、正しいマージンを指定しても 2 番目の画面は表示されません。
誰でも助けることができますか?
編集コード:
プライベート クラス SlidingAnimation extends Animation {
private float mainViewStartX, mainViewEndX;
private float sideViewFromX, sideViewToX;
private float sideView2FromX,sideView2ToX;
private View slideInView,slideOutView,slideInView2;
public SlidingAnimation(float fromX, float toX, float sideViewFromX,
float sideViewToX,float sideView2FromX,float sideView2ToX, int duration,View slideInView,View slideOutView,View slideInView2) {
setDuration(duration);
this.slideInView = slideInView;
this.slideOutView = slideOutView;
this.slideInView2 = slideInView2;
mainViewEndX = toX;
mainViewStartX = fromX;
slideOutViewLayoutParams = (LayoutParams) slideOutView.getLayoutParams();
this.sideViewFromX = sideViewFromX;
this.sideViewToX = sideViewToX;
slideInViewLayoutParams = (LayoutParams) slideInView.getLayoutParams();
if(slideInView2!=null){
Log.w(null,"Side View two also exists");
this.sideView2FromX = sideView2FromX ;
this.sideView2ToX = sideView2ToX;
slideInView2LayoutParams = (LayoutParams)slideInView2.getLayoutParams();
}
}
@SuppressLint("NewApi")
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
// Applies a Smooth Transition that starts fast but ends slowly
if(slideInView2==null){
slideOutViewLayoutParams.rightMargin = (int) (mainViewStartX + ((mainViewEndX - mainViewStartX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideInViewLayoutParams.rightMargin = (int) (sideViewFromX - ((sideViewFromX-sideViewToX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideOutViewLayoutParams.leftMargin = (int)- mainViewEndX;
slideInView.requestLayout();
slideOutView.requestLayout();
Log.w(null,"Slide Out Right Margin:"+slideOutViewLayoutParams.rightMargin);
Log.w(null,"Slide Out Left Margin:"+slideOutViewLayoutParams.leftMargin);
Log.w(null,"Slide In Left Margin:"+slideInViewLayoutParams.leftMargin);
}
else{
slideOutViewLayoutParams.rightMargin = (int) (mainViewStartX + ((mainViewEndX - mainViewStartX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideInViewLayoutParams.rightMargin = (int) (sideViewFromX + ((sideViewToX-sideViewFromX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideOutViewLayoutParams.leftMargin = (int)- mainViewEndX;
slideInViewLayoutParams.leftMargin = (int)-sideViewToX;
slideInView2LayoutParams.rightMargin = (int) (sideView2FromX - ((sideView2FromX-sideView2ToX) * (Math
.pow(interpolatedTime - 1, 5) + 1)));
slideOutView.requestLayout();
slideInView.requestLayout();
slideInView2.requestLayout();
Log.w(null,"Slide Out Right Margin:"+slideOutViewLayoutParams.rightMargin);
Log.w(null,"Slide Out Left Margin:"+slideOutViewLayoutParams.leftMargin);
Log.w(null,"Slide In Left Margin:"+slideInViewLayoutParams.leftMargin);
Log.w(null,"Slide In Right Margin:"+slideInViewLayoutParams.rightMargin);
Log.w(null,"Slide In View 2 Right Margin:"+slideInView2LayoutParams.rightMargin);
}
}
}
}
呼び出し :
SlidingAnimation open = new SlidingAnimation(-width+dpToPx(45), width - dpToPx(45/2), 0,width-dpToPx(45),-width+dpToPx(45),0,1000,filterTypeLayout, selectBusLayout,filterOptionLayout) ;