简单的评价打分控件
效果图
代码
Activity:
public class ActivityStarLevel extends Activity {
private StarLevelView mStarLevelView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_star_level_layout);
mStarLevelView = (StarLevelView) findViewById(R.id.star_level_view);
mStarLevelView.init(5, R.drawable.star_full, R.drawable.star_empty);
mStarLevelView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ActivityStarLevel.this, String.valueOf(mStarLevelView.getCurrentValue()), Toast.LENGTH_SHORT).show();
}
});
}
public static void start(Context context) {
Intent i = new Intent();
i.setClass(context, ActivityStarLevel.class);
context.startActivity(i);
}
}
Layout XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="#ffec8b">
<com.starlevel.StarLevelView
android:id="@+id/star_level_view"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="50dp">
</com.starlevel.StarLevelView>
</RelativeLayout>
StarLevelView:
public class StarLevelView extends LinearLayout {
private int mChildNumber;
private float[] mLevels;
private int mStarRes;
private int mEmptyStarRes;
private int currentIndex = -1;
public StarLevelView(Context context) {
this(context, null, 0);
}
public StarLevelView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public StarLevelView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setOrientation(LinearLayout.HORIZONTAL);
}
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//measureChildren(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
public void init(int childNumber, int starRes, int emptyRes) {
mChildNumber = childNumber;
mStarRes = starRes;
mEmptyStarRes = emptyRes;
if (mChildNumber > 0) {
mLevels = new float[mChildNumber];
for (int i = 0; i < mChildNumber; i++) {
final int index = i;
mLevels[i] = i + 1;
final FrameLayout frame = new FrameLayout(getContext());
final ImageView image = new ImageView(getContext());
image.setImageResource(mEmptyStarRes);
FrameLayout.LayoutParams frame_lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
frame.addView(image, frame_lp);
LinearLayout.LayoutParams lp =
new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f);
addView(frame, i, lp);
frame.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onStarSelect(index, image, frame);
}
});
}
}
}
private void onStarSelect(int i, ImageView image, View frame) {
if (i == currentIndex + 1) {
currentIndex++;
image.setImageResource(mStarRes);
} else if (i == currentIndex) {
currentIndex--;
image.setImageResource(mEmptyStarRes);
}
((View) frame.getParent()).callOnClick();
invalidate();
}
public float getCurrentValue() {
if (currentIndex >=0 && currentIndex < mChildNumber) {
return mLevels[currentIndex];
}
return 0;
}
public void setChildNumber(int number) {
mChildNumber = number;
}
public void setLevels(float[] levels) {
mLevels = levels;
}
public void setStarRes(int res) {
mStarRes = res;
}
public void setEmptyStarRes(int res) {
mEmptyStarRes = res;
}
}