activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity" android:background="#f7fffa" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40dp" android:layout_margin="5dp" android:padding="5dp" android:fontFamily="sans-serif-condensed" android:textColor="@android:color/black" android:text="This text will be blink\nafter clicking the button." /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Blink The Text" android:layout_below="@id/tv" /> </RelativeLayout>
MainActivity.java
package com.cfsuman.me.androidcodesnippets; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; import android.os.Handler; public class MainActivity extends AppCompatActivity { private Context mContext; private Activity mActivity; private RelativeLayout mRelativeLayout; private TextView mTextView; private Button mButton; private Handler mHandler; private Runnable mRunnable; private int mInterval = 300; // milliseconds private boolean initialState = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get the application context mContext = getApplicationContext(); // Get the activity mActivity = MainActivity.this; // Get the widgets reference from XML layout mRelativeLayout = (RelativeLayout) findViewById(R.id.rl); mTextView = (TextView) findViewById(R.id.tv); mButton = (Button) findViewById(R.id.btn); // Initialize the Handler mHandler = new Handler(); // Set a click listener for button mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /* Runnable Represents a command that can be executed. Often used to run code in a different Thread. Thread A Thread is a concurrent unit of execution. It has its own call stack for methods being invoked, their arguments and local variables. Each application has at least one thread running when it is started, the main thread, in the main ThreadGroup. The runtime keeps its own threads in the system thread group. There are two ways to execute code in a new thread. You can either subclass Thread and overriding its run() method, or construct a new Thread and pass a Runnable to the constructor. In either case, the start() method must be called to actually execute the new Thread. */ // Initialize the Runnable mRunnable = new Runnable() { /* public abstract void run () Starts executing the active part of the class' code. This method is called when a thread is started that has been created with a class which implements Runnable. */ @Override public void run() { // Do the task doTask(); } }; /* public selesai boolean postDelayed (Runnable r, long delayMillis) Causes the Runnable r to be added to the message queue, to be run after the specified amount of time elapses. The runnable will be run on the thread to which this handler is attached. The time-base is uptimeMillis(). Time spent in deep sleep will add an additional delay to execution. */ // Schedule the task mHandler.postDelayed(mRunnable,mInterval); } }); } // Custom method to do a task protected void doTask(){ if(initialState){ // Reverse the boolean initialState = false; // Set the TextView color to red mTextView.setTextColor(Color.RED); }else { // Reverse the boolean initialState = true; // Change the TextView color to initial State mTextView.setTextColor(Color.BLACK); } // Schedule the task mHandler.postDelayed(mRunnable,mInterval); } }
Komentar
Posting Komentar