Published Date : 2021年3月8日16:40

パート10: 給与所得者の所得税と住民税を計算するAndroidアプリ
Part 10: Android App Calculates Income and Resident Taxes for Salaried Workers


This blog has an English translation


ニコニコ動画にアップした動画のまとめ記事です。

This is a summary blog post about a video I uploaded to NicoNico.

細かい部分は動画を参考にしてください。

Please refer to the video for details.


目次

Table of Contents




① 動画の説明
① Video Description



警告:

今回説明する給与所得者の所得税及び住民税を計算するツールは、あくまで簡易的なお遊び用のツールです。

正確な数値、計算方法は各自で調べて下さい。

このツールは大雑把に大体の見積りを計算して楽しむ為のツールです。

決して従業員の年末調整や個人の確定申告等に使用しないでください。

さらに、税金の計算方法は変更される場合があり、控除についても同様です。

また、控除や税金の計算方法が間違っている可能性もありますので、

あまり信用せずに、各自で調べてから実験してみてください。

このツールを使って何かしらの損害が発生したとしても、私は一切の責任を負いません。

Warning:

​The tool I'm going to show you for calculating income and residence taxes for salaried workers is just a simple tool for playing.

​Please check the exact number and calculation method by yourself.

​This tool is used to calculate rough estimates and enjoy them.

​Do not use for year-end adjustment of employees or for individual tax return.

In addition, the method of calculating taxes and deductions may change.

Also, there is a possibility that the deduction and tax calculation methods are incorrect.

Don't trust it too much, and test it yourself.

​I will not be liable for any damage caused by using this tool.

前回の続きです。

Continued from last time.

税金計算をするアクティビティのJavaファイルに戻ります。

Return to the Java file for the activity for which you want to calculate tax.

各種控除の入力および表示欄を開閉するメソッドを作成します。

Create methods to expand and collapse the entry and display fields for various deductions.

public void collapseAndexpand(View view) {
    switch (variousDeductionsLayout.getVisibility()) {
        case View.GONE:
        default:
            break;
    }
}

開閉したいGridLayoutをIDを使ってインスタンス化します。

Instantiate the GridLayout you want to expand and collapse using its ID.

private GridLayout variousDeductionsLayout;
variousDeductionsLayout = findViewById(R.id.variousDeductionsLayout);

getVisibilityメソッドを使ってレイアウトが開閉しているかどうか判断します。

Use the getVisibility method to determine whether a layout is expand or collapse.

もし閉じているならレイアウトを開くメソッドを呼び出します。

If it is collapsed, call the method that expands the layout.

case View.GONE:
    expand(variousDeductionsLayout);
    break;
public static void expand(final View v) {
    
}

開いているならレイアウトを閉じるメソッドを呼び出します。

If the layout is expanded, call the collapse layout method.

case View.VISIBLE:
    collapse(variousDeductionsLayout);
    break;
public static void collapse(final View v) {
            
}

テキストとボタンの表示も変更します。

Also changes the display of text and buttons.

スクロールビューのscrollToメソッドを使って自動でスクロールするようにします。

Use the scrollTo method of the scroll view to scroll automatically.

渡されたレイアウトの親Viewの横幅の値をMODEのEXACTLYで指定してその長さを取得します。

Gets the length by specifying with MODE EXACTLY of the parent View of the passed layout.

Viewのwrapcontentの長さをMODEをUNSPECIFIEDで指定して不特定な長さとして取得します。

Get the wrapcontent length of the View as an indeterminate length with MODE specified by UNSPECIFIED.

onMeasureを使ってレイアウトの幅と高さを決定します。

Use onMeasure to determine the width and height of the layout.

レイアウトの高さを取得します。

Gets the height of the layout.

レイアウトの高さを1ピクセルに設定します。

Sets the height of the layout to 1 pixel.

レイアウトを表示させます。

Display the layout.

アニメーションの内容を設定します。

Sets the content of the animation.

interpolatedTimeは0.0fから1.0fの間の値を取り、これはアニメーションの進行割合を示しています。

interpolatedTime takes a value between 0.0f and 1.0f, indicating the progression of the animation.

interpolatedTimeの値が1なら、GridLayoutの高さを代入します。つまり展開アニメーション終了です。

If the interpolatedTime value is 1, assigns the height of the GridLayout. That is, the expand animation ends.

そうでないならレイアウトの高さにinterpolatedTimeを掛けた値を代入します。

Otherwise, assigns the height of the layout is multiplied by interpolatedTime.

つまり高さがinterpolatedTimeに合わせて0%から100%の長さでアニメーションが行われます。

That is, the height animates will be between 0% and 100% long to match the interpolatedTime.

そしてrequestLayoutメソッドを使用してレイアウトのサイズを更新します。

Then use the requestLayout method to update the size of the layout.

Viewの境界を変更する場合はwillChangeBoundsメソッドを使ってTrueを返すようにします。

The willChangeBounds method should return True when changing the boundaries of a View.

アニメーションインスタンスのsetDurationメソッドを使って、どのくらいの速さでアニメーションするかを設定します。

Use the setDuration method of the animation instance to set how quickly you want the animation to occur.

アニメーションしたいビューの高さをviewのgetDisplayMatrics.densityで割ってやると、ピクセルがdipに変換されます。

Dividing the height of the view you want to animate by the getDisplayMatrics.density of the view converts the pixels to dip.

そのdipの大きさをミリ秒単位といった形でsetDurationメソッドに渡してやります。

Pass the size of the dip as a value in milliseconds to the setDuration method.

要するにtargetHeightが大きければアニメーションの間隔は長くなります。

In short, the larger the targetHeight, the longer the spacing between animations.

starAnimationメソッドを使ってアニメーションを開始します。

Use the starAnimation method to start the animation.

閉じる時のメソッドも同じように記述します。

The collapsing method is written in the same way.

試しにアニメーションの速度を比較してみましょう。

Let's compare the speed of the animation.

通常だと閉じるボタンを押したとき、レイアウトに高さがあるので閉じる時間が遅いです。

Normally, when you click the collapse button, the collapsing time is slow because the layout has a height.

setDurationメソッドの引数に入れる値を小さくしてください。

Decrease the value in the setDuration method argument.

そうすると、レイアウトを閉じるスピードが速くなっているのが分かります。

You can see that the layout is collapsing faster.

これは要するにsetDurationメソッドの引数に渡すミリ秒数の値が小さくなっているからです。

This is essentially because the value of the number of milliseconds passed to the setDuration method argument is smaller.

では給与収入を入力するメソッドを作成しましょう。

Let's create a method to input salary revenue.

値の入力が終わり、エンターボタンがクリックされたら即座に計算結果を表示させるようにします。

This way, when you finish entering a value and click the Enter button, the result of the calculation will be displayed immediately.

IME_ACTION_DONEに設定されていれば、入力フォームからフォーカスを外し、次の入力欄へフォーカスさせないようにします。

If it is set to IME_ACTION_DONE, the focus is removed from the input form and the next entry field is not focused.

次に画面に入力された値を取り出し、給与所得控除を計算するメソッドを呼び出します。

It then retrieves the value entered on the screen and calls a method to calculate the salary income deduction.

ではこのメソッドを持つクラスファイルを新たに作成していきましょう。

Now let's create a new class file containing this method.

画面の指示に従って、新しいパッケージとクラスファイルを作成してください。

Follow the on-screen instructions to create a new package and class file.

パート11へ続く。

Continue to Part 11.



以上です。お疲れ様です。

That's all. Thank you for your hard work.