Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在“收缩缩放”上组合多个视图,并将其替换为其他视图_Android_Android Layout_Scrollview_Android Canvas_Pinchzoom - Fatal编程技术网

Android 在“收缩缩放”上组合多个视图,并将其替换为其他视图

Android 在“收缩缩放”上组合多个视图,并将其替换为其他视图,android,android-layout,scrollview,android-canvas,pinchzoom,Android,Android Layout,Scrollview,Android Canvas,Pinchzoom,我有一个子类HorizontalScrollView(parent),它在其中管理多个子视图。每个视图由一个矩形、下方几行和TextView组成(见图)。我在其中添加了收缩缩放手势,因此当用户收缩缩放时,两个手指之间的所有子视图都会根据比例因子进行缩放。例如,我的第一个手指在一月,第二个手指在三月,我在做夹点,所有三个视图(一月,二月和三月)都在缩放。我只在x方向缩放。我还定义了特定视图的最小和最大宽度 现在我想扩展这个特性。我想在其中包含某种层次结构特征。因此,如果特定层次中的所有视图都处于最

我有一个子类HorizontalScrollView(parent),它在其中管理多个子视图。每个视图由一个矩形、下方几行和TextView组成(见图)。我在其中添加了收缩缩放手势,因此当用户收缩缩放时,两个手指之间的所有子视图都会根据比例因子进行缩放。例如,我的第一个手指在一月,第二个手指在三月,我在做夹点,所有三个视图(一月,二月和三月)都在缩放。我只在x方向缩放。我还定义了特定视图的最小和最大宽度

现在我想扩展这个特性。我想在其中包含某种层次结构特征。因此,如果特定层次中的所有视图都处于最小宽度,并且如果我尝试进一步缩小它们(通过收缩缩放),那么所有这些视图都必须替换为不同的视图

例如,假设一月、二月和三月在一个层次中,通过收缩缩放,我将它们缩小到最小宽度。如果我进一步尝试缩小它,那么在这三个视图的位置会出现另一个视图

这个特性的目的是假设我在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);
     }
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();

            }