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

مشکل در CoordinatorLayout.Behavior

jabi  8 سال پیش  8 سال پیش
0 0

سلام خدمت دوستان؛ دارم چیزی شبیه به پروفایل تلگرام میسازم (وقتی اسکرول به بالا داریم پروفایل دایره ای شکل کوچک شده و به تولبار می چسبد)

توی CoordinatorLayout.Behavior خطای Could not inflate Behavior subclass دارم نمیدونم مشکل چیه :(

اینم کدش: (اون CircularImageView یدونه کاستوم ویو است)

راه حل : در سازنده (Constructor) پارامتر int defStyle قرار داشت که در سازنده CoordinatorLayout نبود :)

 
package fima.com.fima.graphic;

import android.content.Context;
import android.content.res.TypedArray;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.util.AttributeSet;
import android.view.View;

import fima.com.fima.R;
import fima.com.fima.framework.ui.CircularImageView;

public class profileImageViewBehavior extends CoordinatorLayout.Behavior<CircularImageView> {

private Context mContext;

private float mCustomFinalYPosition;
private float mCustomStartXPosition;
private float mCustomStartToolbarPosition;
private float mCustomStartHeight;
private float mCustomFinalHeight;

private float mAvatarMaxSize;
private float mFinalLeftAvatarPadding;
private float mStartPosition;
private int mStartXPosition;
private float mStartToolbarPosition;
private int mStartYPosition;
private int mFinalYPosition;
private int mStartHeight;
private int mFinalXPosition;
private float mChangeBehaviorPoint;

public profileImageViewBehavior() {
//DO NOTHING HERE
}

// مشکل اصلی اینجا بود که پارامتر داخل کانستراکتور حذف شد
public profileImageViewBehavior(Context context, AttributeSet attrs) {
mContext = context;
if (attrs != null) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.profileImageViewBehavior,0 ,0);
mCustomFinalYPosition = a.getDimension(R.styleable.profileImageViewBehavior_finalYPosition, 0);
mCustomStartXPosition = a.getDimension(R.styleable.profileImageViewBehavior_startXPosition, 0);
mCustomStartToolbarPosition = a.getDimension(R.styleable.profileImageViewBehavior_startToolbarPosition, 0);
mCustomStartHeight = a.getDimension(R.styleable.profileImageViewBehavior_startHeight, 0);
a.recycle();
}
init();
mFinalLeftAvatarPadding = context.getResources().getDimension(R.dimen.spacing_normal);
}

private void init() {
mAvatarMaxSize = mContext.getResources().getDimension(R.dimen.image_width);
}

@Override
public boolean layoutDependsOn(CoordinatorLayout parent, CircularImageView child, View dependency) {
return dependency instanceof AppBarLayout;
}

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, CircularImageView child, View dependency) {

// setting my attrs if no attribute set in xml file
maybeInitProperties(child, dependency);

final int maxScrollDistance = (int) (mStartToolbarPosition);
float expandedPercentageFactor = dependency.getY() / maxScrollDistance;

if (expandedPercentageFactor < mChangeBehaviorPoint) {
float heightFactor = (mChangeBehaviorPoint - expandedPercentageFactor) / mChangeBehaviorPoint;

float distanceXToSubtract = ((mStartXPosition - mFinalXPosition) * heightFactor) + (child.getHeight()/2);
float distanceYToSubtract = ((mStartYPosition - mFinalYPosition) * (1f - expandedPercentageFactor)) + (child.getHeight()/2);

child.setX(mStartXPosition - distanceXToSubtract);
child.setY(mStartYPosition - distanceYToSubtract);

float heightToSubtract = ((mStartHeight - mCustomFinalHeight) * heightFactor);

CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
lp.width = (int) (mStartHeight - heightToSubtract);
lp.height = (int) (mStartHeight - heightToSubtract);
child.setLayoutParams(lp);
} else {
float distanceYToSubtract = ((mStartYPosition - mFinalYPosition) * (1f - expandedPercentageFactor)) + (mStartHeight/2);

child.setX(mStartXPosition - child.getWidth()/2);
child.setY(mStartYPosition - distanceYToSubtract);

CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
lp.width = (int) (mStartHeight);
lp.height = (int) (mStartHeight);
child.setLayoutParams(lp);
}
return true;
}

// dependenry is my toolbar and the chils is my circularImageView
private void maybeInitProperties(CircularImageView child, View dependency) {
if (mStartYPosition == 0)
mStartYPosition = (int) (dependency.getY());

if (mFinalYPosition == 0)
mFinalYPosition = (dependency.getHeight() /2);

if (mStartHeight == 0)
mStartHeight = child.getHeight();

if (mStartXPosition == 0)
mStartXPosition = (int) (child.getX() + (child.getWidth() / 2));

if (mFinalXPosition == 0)
mFinalXPosition = mContext.getResources().getDimensionPixelOffset(R.dimen.jaber) + ((int) mCustomFinalHeight / 2);

if (mStartToolbarPosition == 0)
mStartToolbarPosition = dependency.getY();

if (mChangeBehaviorPoint == 0) {
mChangeBehaviorPoint = (child.getHeight() - mCustomFinalHeight) / (2f * (mStartYPosition - mFinalYPosition));
}
}

}

 برای این سوال پاسخی وجود ندارد.

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