对于用户交互的APP,出现对某个展示类消息很普遍,仿淘宝的星星点击效果;
首先layout布局:
<RelativeLayout 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" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="评价星星点击效果:" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="26dp" >
<ImageView
android:id="@+id/start_im1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/star01" />
<ImageView
android:id="@+id/start_im2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/star01" />
<ImageView
android:id="@+id/start_im3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/star01" />
<ImageView
android:id="@+id/start_im4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/star01" />
<ImageView
android:id="@+id/start_im5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/star01" />
</LinearLayout>
</RelativeLayout>
原理:点击第几个就是几个星,使用handler线程通信更新UI处理,一个简单的办法,全部数组实现。
public class MainActivity extends Activity implements OnClickListener {
private int[] ids = { R.id.start_im1, R.id.start_im2, R.id.start_im3,
R.id.start_im4, R.id.start_im5 };
private ImageView[] im;
private int count=0;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
int start=msg.what;
for(int i=0;i<start;i++){
im[i].setImageResource(R.drawable.star02);
}
for(int j=start;j<5;j++){
im[j].setImageResource(R.drawable.star01);
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
im = new ImageView[ids.length];
for (int i = 0; i < ids.length; i++) {
im[i] = (ImageView) findViewById(ids[i]);
im[i].setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_im1:
count=1;
Message msg = new Message();
msg.what=1;
handler.sendMessage(msg);
break;
case R.id.start_im2:
count=2;
Message msg2 = new Message();
msg2.what=2;
handler.sendMessage(msg2);
break;
case R.id.start_im3:
count=3;
Message msg3 = new Message();
msg3.what=3;
handler.sendMessage(msg3);
break;
case R.id.start_im4:
count=4;
Message msg4 = new Message();
msg4.what=4;
handler.sendMessage(msg4);
break;
case R.id.start_im5:
count=5;
Message msg5 = new Message();
msg5.what=5;
handler.sendMessage(msg5);
break;
}
}
}
这种方式就是点击第几个,把前面的几个图片更换为变色后的,后面的更换为变化前的,每次点击一次都会对5个星星的状态进行判断。