私は長時間露光計算機を作成しています。これにより、ユーザーは現在のシャッター速度を入力し、EV (露出値) を選択し、[計算] をクリックして同等の露出を計算できます。
ここで確認できるように、現在のシャッター速度と目的の EV 変更の両方がスピナーから選択されます 。
結果として得られる等価エクスポージャーは、2 つの変数に依存します。
例えば:
現在のシャッター速度: 1/100 EV: +1 等価シャッター速度 = 1/50
現在のシャッター速度: 1/100 EV: +2 等価シャッター速度 = 1/25
すべての変数に対してこれを行う方法を考え出した唯一の方法は、すべての可能な組み合わせをリストするMASSIVE IF ステートメントです。
If shutter speed is 1/100 and EV is +2, then equivalent shutter speed is 1/25.
20 の異なるシャッター スピードと 10 の異なる EV 値があるため、大量の IF になります。
どうすればこれを行うことができるかについて、誰かがより良い考えを持っていますか?
私は完全なコードではなく、疑似コードまたはそれを行う方法を求めているので、自分で解決できます。ありがとう。
どんな助けでも大歓迎です!
編集:
これを計算する公式は、EV の増分ごとにシャッター速度を 2 倍にする必要があるというものですが、シャッター速度の形式が変わるため、これは複雑です。
1/4000、1/2000、1/1000、1/500、1/250、1/125、1/60、1/30、1/15、1/8、1/4、1/2、1秒、2秒、 4秒、8秒、15秒、30秒、1分 2分、4分、8分など
編集:
要求された既存のコード:
レイアウト:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@drawable/fabricc"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ExpCalc" >
<ImageView
android:id="@+id/apertureexample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:contentDescription="Aperture Example Image"
android:padding="5dp"
android:adjustViewBounds="true"
android:src="@drawable/longexpcalc" />
<LinearLayout
android:id="@+id/LinearLayout02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
android:text="Current Shutter Speed:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Spinner
android:id="@+id/Locationspinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:entries="@array/shutterspeeds_array"
android:padding="10dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout04"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp" >
<LinearLayout
android:id="@+id/LinearLayout0f4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" >
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
android:text="EV Adjustment:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView1233"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="2dp"
android:text="(+6 = 6-stop ND Filter)"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<Spinner
android:id="@+id/evLocationspinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:entries="@array/ev_array"
android:padding="10dp" />
</LinearLayout>
<Button
android:id="@+id/CalculateEquivExposure"
style="@style/sub_menu"
android:background="@drawable/blue_menu_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="5dp"
android:text="Calculate Equivelent Exposure" />
<TextView
android:id="@+id/equivexp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="40dp"
android:textSize="35sp"
android:text="1/8000" />
</LinearLayout>
ジャワ:
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class ExpCalc extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.expcalc);
// Show the Up button in the action bar.
setupActionBar();
}
//Sets up Action Bar
private void setupActionBar() {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.home, menu);
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
//Sets up buttons in the quick menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
if (item.getItemId() == R.id.LessonsTutorials) {
startActivity(new Intent(this, Lessons.class));
}
if (item.getItemId() == R.id.PhotoTools) {
startActivity(new Intent(this, Tools.class));
}
if (item.getItemId() == R.id.Glossary) {
startActivity(new Intent(this, Glossary.class));
}
if (item.getItemId() == R.id.Help) {
startActivity(new Intent(this, Help.class));
}
return super.onOptionsItemSelected(item);
}
}
文字列配列:
<string-array name="shutterspeeds_array">
<item>1/8000</item>
<item>1/4000</item>
<item>1/2000</item>
<item>1/1000</item>
<item>1/500</item>
<item>1/250</item>
<item>1/125</item>
<item>1/60</item>
<item>1/30</item>
<item>1/15</item>
<item>1/8</item>
<item>1/4</item>
<item>1/2</item>
<item>1 sec</item>
<item>2 sec</item>
<item>4 sec</item>
<item>8 sec</item>
<item>15 sec</item>
<item>30 sec</item>
<item>1 min</item>
</string-array>
<string-array name="ev_array">
<item>0</item>
<item>+1</item>
<item>+2</item>
<item>+3</item>
<item>+4</item>
<item>+5</item>
<item>+6</item>
<item>+7</item>
<item>+8</item>
<item>+9</item>
<item>+10</item>
</string-array>