Android 在“收缩缩放”上组合多个视图,并将其替换为其他视图
我有一个子类HorizontalScrollView(parent),它在其中管理多个子视图。每个视图由一个矩形、下方几行和TextView组成(见图)。我在其中添加了收缩缩放手势,因此当用户收缩缩放时,两个手指之间的所有子视图都会根据比例因子进行缩放。例如,我的第一个手指在一月,第二个手指在三月,我在做夹点,所有三个视图(一月,二月和三月)都在缩放。我只在x方向缩放。我还定义了特定视图的最小和最大宽度 现在我想扩展这个特性。我想在其中包含某种层次结构特征。因此,如果特定层次中的所有视图都处于最小宽度,并且如果我尝试进一步缩小它们(通过收缩缩放),那么所有这些视图都必须替换为不同的视图 例如,假设一月、二月和三月在一个层次中,通过收缩缩放,我将它们缩小到最小宽度。如果我进一步尝试缩小它,那么在这三个视图的位置会出现另一个视图 这个特性的目的是假设我在HorizontalScrollView中有10年的时间。所以我总共有120个视图(10年*12个月)。因此,如果我缩小一年中所有月份的比例,并进一步尝试缩小它们,那么我应该用一个年视图替换12个月视图 希望我的问题很清楚。谁能告诉我怎么做吗 编辑: 我将子视图的比例因子存储在数组状态[]中,并在代码中添加了两个方法Android 在“收缩缩放”上组合多个视图,并将其替换为其他视图,android,android-layout,scrollview,android-canvas,pinchzoom,Android,Android Layout,Scrollview,Android Canvas,Pinchzoom,我有一个子类HorizontalScrollView(parent),它在其中管理多个子视图。每个视图由一个矩形、下方几行和TextView组成(见图)。我在其中添加了收缩缩放手势,因此当用户收缩缩放时,两个手指之间的所有子视图都会根据比例因子进行缩放。例如,我的第一个手指在一月,第二个手指在三月,我在做夹点,所有三个视图(一月,二月和三月)都在缩放。我只在x方向缩放。我还定义了特定视图的最小和最大宽度 现在我想扩展这个特性。我想在其中包含某种层次结构特征。因此,如果特定层次中的所有视图都处于最
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);
}
boolean checkstate()
{
如果(说明[6]因为您知道年视图的宽度将基于月的最小宽度,您是否可以包括一个可见性设置为“已消失”的年视图,然后根据需要交换月和年的可见性
为了使其更具动态性,您可以为每个视图设置一个对象来存储其状态,在本例中,该对象将包含一些信息,告诉您它是处于最小宽度还是最大宽度。缩放时,您将检查每个对象的状态更改。如果您的状态检查通过了某些规则(例如,最小宽度为12个月的对象,或最大宽度以上为10年的对象),您将请求一个布局,该布局将用适当的新视图替换视图,并更新您的状态对象。我必须在年视图中显示所有12个月视图的摘要。因此,当用户折叠时,所有月视图都应隐藏,并由年视图替换,年视图具有所有12个月的摘要。但是按照您建议的方式,有一个关于两个问题:1)年视图大小必须是月视图最小大小的总和。2)我必须在开始时存储年度视图,但它的可见性消失了。这会降低滚动的性能。此外,如果我必须在连续10年处于最小宽度的视图中再包含一个层次结构(例如10年摘要),则此想法无法扩展。我不明白1是怎么一个问题。你说你设置了最小值每个视图的宽度,因此您知道*12是什么。对于第2点,设置为“消失”的视图不会作为布局的一部分进行计算,因此不会减慢任何速度。假设my*12的大小有点大,我希望年视图比这个尺寸小。我在回答中对其进行了扩展,以使其更具动态性。我建议年视图的原因是min个月的宽度*12是这样的,它将与它所取代的宽度相同,并且没有跳跃。它当然可以是任何你想要的宽度。
//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();
}