我有一个HorizontalScrollView(parent)的子类,它管理着多个子视图。每个视图都包含一个矩形,下面几行和TextView(见图)。我在其中添加了捏缩放手势,因此当用户捏缩放时,根据比例因子缩放两个手指之间的所有子视图。所以例如我的第一根手指在三月份的一月和二指上,我正在进行捏合,所有三个视图(1月,2月和3月)都在缩放。我只在x方向缩放。我还定义了特定视图的最小和最大宽度。
现在我想扩展此功能。我想在其中包含某种层次特征。因此,如果特定层次结构中的所有视图都具有最小宽度,并且如果我尝试进一步缩小它们(通过缩放缩放),则所有这些视图必须由不同的视图替换。
例如,假设Jan,Feb和March处于一个层次结构中,通过缩放缩放我将它们缩小到最小宽度。如果我进一步尝试将其缩小,那么代替这三个视图会出现另一个视图。
这个功能的目的是说我在HorizontalScrollView中有10个月的月份。所以我总共有120次观看(10年* 12个月)。因此,如果我缩减一年中的所有月份并进一步尝试缩小它们,那么我应该用一年视图替换12个月的视图。
希望我的问题清楚。任何人都可以告诉我该怎么做。
编辑: 我将子视图的比例因子存储在数组状态[]中,并在我的代码中添加了两个方法
boolean checkstate()
{
if(state[6]<=0.3f &&state[7]<=0.3f &&state[8]<=0.3f )
return true;
else
return false;
}
void changewithparent()
{
LinearLayout parent=(LinearLayout)takeparent();
parent.removeViewAt(6);
parent.removeViewAt(6);
parent.removeViewAt(6);
//parent.requestLayout();
View v=kk.getView(6, null, parent);
v.setBackgroundColor(Color.GREEN);
parent.addView(v, 0);
}
同样在ScaleListener中我添加了以下行
//start and end are the indices of child views which are scaling
for(int i=start;i<=last;i++)
{
LinearLayout ll=(LinearLayout)pp.getChildAt(i);
DrawView view=(DrawView)ll.findViewById(R.id.drawview);
view.mScaleFactor=mScaleFactor;
view.invalidate();
state[i]=view.sf; updating the scale factor in parent by taking the value from child view
change= checkstate();
if(change==true)
changewithparent();
}
但是,只要达到子视图的最小限制并且我尝试用父视图替换它们,我的应用程序就会崩溃
答案 0 :(得分:0)
由于您根据月份的最小宽度知道年度视图的宽度,您是否可以将年度视图的可见性设置为GONE,然后根据需要交换月份和年份的可见性?
为了使它更具动感,你可以为每个存储它状态的视图设置一个对象,在这种情况下,它会包含一些信息,告诉你它是否处于最小或最大宽度。缩放时,您将检查每个对象的状态更改。如果状态检查通过了一些规则(例如,最小宽度为12个月的对象,或者高于最大宽度的10年对象),则会请求一个布局,然后用适当的新视图替换视图,并更新状态对象。