Nama : Riska Hidayah Putri
Nim : 312210102
Kelas : TI.22.B1
Mata Kuliah : Pemrograman Mobile
Tugas : Membuat tombol yang setiap diklik dapat bertambah angkanya, namun dengan urutan angka fibonacci, lalu lengkapi dengan fitur toast
berikut adalah link video aplikasi yang di jalankan (dijalankan pada device menggunakan usb debugging) : tonton video
Source Code:
- activity_main.Xml (dibuat dengan design pada android studio):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/numberLayout"
android:layout_width="match_parent"
android:layout_height="76dp"
android:orientation="horizontal">
<EditText
android:id="@+id/maxNumber"
android:layout_width="234dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:ems="10"
android:freezesText="false"
android:inputType="numberDecimal"
android:text="0" />
<Button
android:id="@+id/buttonMax"
android:layout_width="143dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Set Maximum" />
</LinearLayout>
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="438dp"
android:layout_below="@id/numberLayout"
android:background="#eeeeee"
android:clipToPadding="false"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/textNama2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="clip_horizontal|center"
android:layout_marginTop="-40dp"
android:layout_marginBottom="30dp"
android:text="@string/nama"
android:textAlignment="center"
android:textSize="24sp" />
<TextView
android:id="@+id/textNama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="clip_horizontal|center"
android:layout_marginTop="-40dp"
android:layout_marginBottom="30dp"
android:text="@string/nim"
android:textAlignment="center"
android:textSize="24sp" />
<TextView
android:id="@+id/textCountFibo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="0"
android:textAlignment="center"
android:textColor="#000000"
android:textSize="150sp" />
<TextView
android:id="@+id/textCount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tombol Hitung diklik sebanyak : 0"
android:textAlignment="center"
android:textSize="20sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="29dp"
android:layout_weight="1"
android:text="Maksimum Angka fibo : "
android:textAlignment="textEnd"
android:textSize="20sp" />
<TextView
android:id="@+id/textMaxFibo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="0"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/linear"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/buttonCount"
android:layout_width="157dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginTop="10dp"
android:layout_marginRight="35dp"
android:layout_marginBottom="10dp"
android:hapticFeedbackEnabled="false"
android:text="HITUNG"
android:textAlignment="center"
android:textStyle="bold" />
<Button
android:id="@+id/buttonReset"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:text="RESET"
android:textAlignment="center"
android:textStyle="bold"
/>
</LinearLayout>
<Button
android:id="@+id/buttonToast"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Tampilkan Toast"
android:textAlignment="center"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>Penjelasan :
- kita isi relative layout dengan 3 linear layout
- linear layout 1 berisi editText dan button set maximum
- linear layout 2 diisi dengan 3 textview dan 1 linear layout horizontal:
- nama + nim
- jumlah klik pada tombol hitung
- angka fibonacci terakhir
- linear layout : TextView untuk menampilkan jumlah maksimal angka fibonacci
- linear layout 3 berisi :
- linear layout 1 :button hitung + button reset
- linear layout 2 : button toast
- colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="yellow">#F2EF1C</color>
<color name="green">#1CF234</color>
<color name="red">#F50A0A</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<integer-array name="warna_background_fibo">
<item>@color/teal_200</item>
<item>@color/yellow</item>
<item>@color/green</item>
</integer-array>
</resources>- strings.xml
<resources>
<string name="app_name">My Apllication</string>
<string name="nama">Riska Hidayah Putri</string>
<string name="nim">312210102</string>
</resources>- MainActivity.Java :
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
public int count = 0 ;
public int countFibo = 0 ;
public int maxFibo = 0;
public TextView showCount;
public TextView showCountFibo;
public TextView showMaxFibo;
public EditText maxNumber;
public Button buttonToast;
public Button buttonCount;
public Button buttonMax;
public Button buttonReset;
public Toast toastA;
public int[] warna;
public LinearLayout linear;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonToast=(Button)findViewById(R.id.buttonToast);
buttonCount=(Button)findViewById(R.id.buttonCount);
buttonReset=(Button)findViewById(R.id.buttonReset);
buttonMax=(Button)findViewById(R.id.buttonMax);
showCount=(TextView)findViewById(R.id.textCount);
showCountFibo=(TextView)findViewById(R.id.textCountFibo);
showMaxFibo=(TextView)findViewById(R.id.textMaxFibo);
maxNumber=(EditText)findViewById(R.id.maxNumber);
warna = getResources().getIntArray(R.array.warna_background_fibo);
linear =(LinearLayout) findViewById(R.id.linear);
buttonToast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(toastA != null) { toastA.cancel(); }
toastA = Toast.makeText(getApplicationContext(), "Angka Fibonacci : " + countFibo, Toast.LENGTH_SHORT);
toastA.show();
}
});
buttonCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { calculate(view); }
});
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { reset(view); }
});
buttonMax.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
String getNumber = maxNumber.getText().toString();
maxFibo = Integer.parseInt(getNumber);
showMaxFibo.setText(getNumber);
if(toastA != null) { toastA.cancel(); }
toastA = Toast.makeText(getApplicationContext(), "Angka Maksimum fibonacci diubah menjadi " + getNumber, Toast.LENGTH_SHORT);
toastA.show();
};
});
}
protected void calculate(View view){
if(calculateFibo(count + 1) >= maxFibo){
if(toastA != null) toastA.cancel();
toastA = Toast.makeText(getApplicationContext(),"Sudah Mencapai Maksimum !!", Toast.LENGTH_SHORT);
toastA.show();
}else{
count++;
linear.setBackgroundColor(warna[count % 3]);
countFibo = calculateFibo(count);
showCount.setText("Tombol Hitung diklik sebanyak : " + Integer.toString(count));
showCountFibo.setText(Integer.toString(countFibo));
if(count % 5 == 0){
if(toastA != null) toastA.cancel();
toastA = Toast.makeText(getApplicationContext(),"Tombol hitung diklik : "+ count + " Kali", Toast.LENGTH_SHORT);
toastA.show();
}
}
}
protected int calculateFibo(int n){
if(n <= 1) {
linear.setBackgroundColor(warna[2]);
return n;
}
int prev,current,next;
prev = 0;
current = 1;
for (int i = 2; i <= n; i++) {
next = prev + current;
prev = current;
current = next;
}
return current;
}
protected void reset(View view){
count = 0;
countFibo = 0;
showCount.setText("Tombol Hitung diklik sebanyak : " + Integer.toString(count));
showCountFibo.setText(Integer.toString(countFibo));
linear.setBackgroundColor(Color.WHITE);
}
}penjelasan MainActivity.java :
public int count = 0 ;
public int countFibo = 0 ;
public int maxFibo = 0;
public TextView showCount;
public TextView showCountFibo;
public TextView showMaxFibo;
public EditText maxNumber;
public Button buttonToast;
public Button buttonCount;
public Button buttonMax;
public Button buttonReset;
public Toast toastA;
public int[] warna;
public LinearLayout linear;- kita deklarasikan properti atau atribut yang akan kita gunakan dalam aplikasi ini
- untuk count, countFibo dan maxFibo langsung kita isi dengan nilai 0 (integer)
- masing masing diberi sesuai tipe data dan kita set visibility nya public
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonToast=(Button)findViewById(R.id.buttonToast);
buttonCount=(Button)findViewById(R.id.buttonCount);
buttonReset=(Button)findViewById(R.id.buttonReset);
buttonMax=(Button)findViewById(R.id.buttonMax);
showCount=(TextView)findViewById(R.id.textCount);
showCountFibo=(TextView)findViewById(R.id.textCountFibo);
showMaxFibo=(TextView)findViewById(R.id.textMaxFibo);
maxNumber=(EditText)findViewById(R.id.maxNumber);
warna = getResources().getIntArray(R.array.warna_background_fibo);
linear =(LinearLayout) findViewById(R.id.linear);
buttonToast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(toastA != null) { toastA.cancel(); }
toastA = Toast.makeText(getApplicationContext(), "Angka Fibonacci : " + countFibo, Toast.LENGTH_SHORT);
toastA.show();
}
});
buttonCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { calculate(view); }
});
buttonReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) { reset(view); }
});
buttonMax.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
String getNumber = maxNumber.getText().toString();
maxFibo = Integer.parseInt(getNumber);
showMaxFibo.setText(getNumber);
if(toastA != null) { toastA.cancel(); }
toastA = Toast.makeText(getApplicationContext(), "Angka Maksimum fibonacci diubah menjadi " + getNumber, Toast.LENGTH_SHORT);
toastA.show();
};
});
}- disini kita akan mengisi beberapa properti yang belum diisi sebelumnya sesuai dengan tipe data
- lalu dihubungkan menggunakan tipe data dan juga id yang ada pada activity_main.xml
- kemudian kita beri event atau aksi yang akan dilakukan ketika tombol tombol diklik
- saat tombol hitung diklik maka akan menjalankan fungsi calculate
- saat tombol reset diklik maka akan menjalankan fungsi reset
- saat tombol setmaximum diklik maka akan mengisi nilai pada properti maxFibo dan menampilkan toast dengan informasi bahwa angka maksimm fibonacci telah diperbarui
- saat tombol tampilkan toast diklik maka akan menampilkan toast dengan data angka fibonacci
protected void calculate(View view){
if(calculateFibo(count + 1) >= maxFibo){
if(toastA != null) toastA.cancel();
toastA = Toast.makeText(getApplicationContext(),"Sudah Mencapai Maksimum !!", Toast.LENGTH_SHORT);
toastA.show();
}else{
count++;
linear.setBackgroundColor(warna[count % 3]);
countFibo = calculateFibo(count);
showCount.setText("Tombol Hitung diklik sebanyak : " + Integer.toString(count));
showCountFibo.setText(Integer.toString(countFibo));
if(count % 5 == 0){
if(toastA != null) toastA.cancel();
toastA = Toast.makeText(getApplicationContext(),"Tombol hitung diklik : "+ count + " Kali", Toast.LENGTH_SHORT);
toastA.show();
}
}
}- saat fungsi dijalankan, akan dicek terlebih dahulu apakah nilai count + 1 itu sama dengan atau lebih dari jumlah maksimum fibo? jika iya maka akan ada toast yang menampilkan bahwa sudah mencapai maksimum, jika tidak maka nilai count akan ditambah 1 kemudian warna background akan diubah berdasarkan sisa bagi 3 dari count, dari sisa bagi 3 itu hasilnya akan digunakan sebagai index dalam memanggil array warna
- kemudian count yang sudah ditambah , maka akan dijadikan nilai dalam menjalankan fungsi calculateFibo lalu akan menerima data baru yang telah diolah di fungsi tersebut dan kemusian dimasukkan ke properti countFibo
- tampilkan jumlah klik tombol hitung dan juga angka fibonacci
- kita tampilkan toast setiap tombol count diklik sebanyak 5 kali
- untuk toastA.cancel() bermaksud agar toast yang sudah ada langsung dihentikan karena toast paling cepat akan hilang dalam dua detik, jika belum dua detik dan ada toast yang aktif maka toast yang baru akan masuk dalam antrian, dan akan dijalankan berurut setelah dua detik dengan cancel ini maka kita hentikan toast yang ada
- lalu jalankan toast.show() agar langsung kita tampilkan toast yang baru
protected int calculateFibo(int n){
if(n <= 1) {
linear.setBackgroundColor(warna[2]);
return n;
}
int prev,current,next;
prev = 0;
current = 1;
for (int i = 2; i <= n; i++) {
next = prev + current;
prev = current;
current = next;
}
return current;
}- jika angka yanng di kirim kurang dari sama dengan 1, maka akan kita ganti warna background menjadi index kedua, hal ini berguna ketika kita klik button hitung dua kali, meskipun count bertambah 1, namun fibonacci belum bertambah, maka dari itu angka fibonacci yang sama akan mendapat warna background yang sama
- namun jika tidak diberi fungsi ini maka, pemilihan warna background akan berganti berdasarkan isi dari properti count, alhasil angka fibonacci 1 yang muncul dua kali tidak mendapat background warna yang sama
- di fungsi calculateFibo angka count yang dikirimkan dari fungsi calculate akan diolah sehingga akan me return angka fibonacci
protected void reset(View view){
count = 0;
countFibo = 0;
showCount.setText("Tombol Hitung diklik sebanyak : " + Integer.toString(count));
showCountFibo.setText(Integer.toString(countFibo));
linear.setBackgroundColor(Color.WHITE);
}- disini semua properti angka dan textview akan direset
- kemudian warna background akan diganti menjadi warna putih seperti sedia kala