2

ImageView、Button、ToggleButton などの要素を含む Activity があります。そして、ImageView の Horizo​​ntalScrollView を含むサブビュー (LinearLayout)。

サブビューはアニメーションで非表示/表示したい要素です。私のアニメーションは正常に動作します。しかし、ToggleButton に触れるか、フィルターを適用すると、サブビューがリセットされて元の位置に戻ります。

ビューの要素が視覚的に変化すると、サブビューがその元で置き換えられると推測しました。

しかし、私は理由を理解していません...

アクティビティ クラス

public class CameraActivity extends Activity implements PictureCallback
{

    private ToggleButton    flashButton;

    private Button          filterScrollButton;
    private LinearLayout    filterScrollView;
    private LinearLayout    filterScrollViewLayout;
    private Boolean         filtersIsOpened = false;

    private ImageView       filterImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camera);
        // Show the Up button in the action bar.
        getActionBar().setDisplayHomeAsUpEnabled(true);

        flashButton             = (ToggleButton)findViewById(R.id.button_flash);

        filterScrollButton      = (Button)findViewById(R.id.button_open_filters);
        filterScrollView        = (LinearLayout)findViewById(R.id.camera_scroll_filters);
        filterScrollViewLayout  = (LinearLayout)findViewById(R.id.camera_scroll_filters_layout);
    }

    ...

    private void initScrollFilters()
    {
        String[] filters = getResources().getStringArray(R.array.array_filters);

        for (final String string : filters)
        {
            ImageView v         = new ImageView(CameraActivity.this);
            int imageFilterId   = -1;

            if (string != null &&  !string.isEmpty())
            {
                final int imageId   = getResources().getIdentifier("@drawable/filter_" + string, null, getPackageName());
                imageFilterId       = getResources().getIdentifier("@drawable/filter_" + string, null, getPackageName());
                v.setImageDrawable(getResources().getDrawable(imageId));
            }

            final int finalImageFilterId = imageFilterId;

            v.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View view) {
                    Log.d(string + " filter image is touched");
                    CameraActivity.this.cameraManager.setImageFilter(finalImageFilterId); // Apply the new filter into filterImageView
                }
            });

            filterScrollViewLayout.addView(v, 100, 100);
        }
    }

    private void initListeners()
    {
        // Flash
        flashButton.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                // camera parameters is changed
            }
        });

        // Filter scroll view
        filterScrollButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v)
            {
                Log.d("You click the filter scroll button men!!");
                final float direction       = (CameraActivity.this.filtersIsOpened) ? -1 : 1;
                final float yDelta          = -100;
                final Animation animation   = new TranslateAnimation(0, 0, 0, yDelta * direction);

                animation.setAnimationListener(new AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {}

                    @Override
                    public void onAnimationRepeat(Animation animation) {}

                    @Override
                    public void onAnimationEnd(Animation animation)
                    {
                        TranslateAnimation anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, 0.0f);
                        anim.setDuration(1);
                        CameraActivity.this.filterScrollView.startAnimation(anim);

                        int top = (int) (CameraActivity.this.filterScrollView.getTop() + (yDelta * direction));
                        CameraActivity.this.filterScrollView.setTop(top);
                    }
                });

                animation.setDuration(500);
                CameraActivity.this.filterScrollView.startAnimation(animation);

                CameraActivity.this.filtersIsOpened = ! CameraActivity.this.filtersIsOpened;
            }
        });
    }

    ...
}

xml ビュー

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".CameraActivity" >

    <CameraPreview
        android:id="@+id/camera_preview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/camera_preview_filter"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:rotation="90"
        android:scaleType="center"
        android:contentDescription="@string/content_desc_overlay" />

    <LinearLayout
        android:id="@+id/camera_scroll_filters"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="-40dp"
        android:paddingTop="40dp"
        android:orientation="vertical"
        android:clickable="false"
        android:longClickable="false" >

        <Button
            android:id="@+id/button_open_filters"
            android:layout_width="wrap_content"
            android:layout_height="25dp"
            android:layout_gravity="top|center_horizontal"
            android:text="Filters" >
        </Button>

        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FF00FF00"
            android:scrollbars="none" >

            <LinearLayout
                android:id="@+id/camera_scroll_filters_layout"
                android:layout_width="wrap_content"
                android:layout_height="100dp"
                android:layout_gravity="bottom"
                android:orientation="horizontal" >

            </LinearLayout>
        </HorizontalScrollView>

    </LinearLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_gravity="bottom"
        android:background="#FF000000" >

    </FrameLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center_horizontal"
        android:onClick="onCaptureClick"
        android:text="@string/button_capture_text" />

</FrameLayout>
4

0 に答える 0