当前位置: 代码迷 >> Android >> android怎么写一个投票或是表达观点的界面
  详细解决方案

android怎么写一个投票或是表达观点的界面

热度:8   发布时间:2016-04-28 04:25:06.0
android如何写一个投票或是表达观点的界面

先上图:




把这些表示观点的view放在一个LinearLayout里:

<LinearLayout  	      xmlns:android="http://schemas.android.com/apk/res/android"  	      android:id="@+id/repost_vote_tag_list"           android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:orientation="vertical"          android:visibility="gone">      </LinearLayout>

每个Item可以这样来实现:

public class KXTagWidget extends TextView{		String mTagName = "";		/** colors */	int mBgColor = Color.WHITE;	int mPressedBgColor = Color.WHITE;	int mTextColor = Color.WHITE;	int mPressedTextColor = Color.BLACK;		public KXTagWidget(Context context) {		super(context);		setClickable(true);	}		public KXTagWidget(Context context, AttributeSet attrs) {		super(context, attrs);		setClickable(true);	}		public KXTagWidget(Context context, AttributeSet attrs, int defStyle) {		super(context, attrs, defStyle);		setClickable(true);	}		public void setName(String tagName){		if(tagName != null){			mTagName = tagName;			this.setText(mTagName);		}	}		public void setBgColor(int bgColor, int pressedBgColor){		mBgColor = bgColor;		mPressedBgColor = pressedBgColor;		this.setBackgroundColor(bgColor);//		this.set					}		public int getmPressedBgColor() {		return mPressedBgColor;	}	public void setmPressedBgColor(int mPressedBgColor) {		this.mPressedBgColor = mPressedBgColor;	}	public int getmPressedTextColor() {		return mPressedTextColor;	}	public void setmPressedTextColor(int mPressedTextColor) {		this.mPressedTextColor = mPressedTextColor;	}	public int getmBgColor() {		return mBgColor;	}	public void setmBgColor(int mBgColor) {		this.mBgColor = mBgColor;	}	public int getmTextColor() {		return mTextColor;	}	public void setmTextColor(int mTextColor) {		this.mTextColor = mTextColor;	}	public void setTextColor(int textColor, int pressedTextColor){		mTextColor = textColor;		mPressedTextColor = pressedTextColor;	}			@Override	protected void onDraw(Canvas canvas) {		super.onDraw(canvas);				//加画边框		Paint paint = new Paint();		paint.setColor(this.mBgColor);				int width = getWidth();		int height = getHeight();		canvas.drawLine(0, 0, width - 1, 0, paint);		canvas.drawLine(width - 1, 0, width - 1, height , paint);		canvas.drawLine(width - 1, height -1, 0, height - 1, paint);		canvas.drawLine(0, height -1 , 0, 0, paint);	}		public int getMesuredWidth() {		int mesuredWidth = 0;		Paint p = this.getPaint();		float textWidth = p.measureText(mTagName);		mesuredWidth = (int)textWidth + this.getCompoundPaddingLeft()			+ this.getCompoundPaddingRight();					return mesuredWidth;	}	}

Activity的实现:

	private static final int VOTE_BAR_IMAGE_NUM = 9;	private int mVoteBarImage[] = new int[VOTE_BAR_IMAGE_NUM];	private HashMap<String, View> mVoteControlMap = new HashMap<String, View>();	private int mTagBgColor[] = new int[14];	/** tag touch listener */	private TagOnTouchListener mTagOnTouchListener = null;	/** tag click listener */	private TagOnClickListener mTagOnClickListener = null;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		initTagBgColor();		mTagList.add("导致反对微软");		mTagList.add("声浪再次掀起的");		mTagList.add("声势");		mTagList.add("XXX");		mTagList.add("YYYYYY");		mTagList.add("XXXXXXXXXXXXXX");		mTagList.add("ZZZZZZZZ");		mTagList.add("其中一些中小规模的公司甚至经常低于国家标准甚至不给赔偿");		mTagList.add("按照国家劳动法有关规定");		mTagList.add("即以在诺基亚公司");		mTagList.add("国家");		constructViews();	}	private void constructViews() {		// total number of votes		String text = "一共有"+String.valueOf(11)+"项";		TextView view = (TextView) this				.findViewById(R.id.repost_vote_total_num_des);		view.setText(text);		// friend's opinion label		TextView view2 = (TextView) this				.findViewById(R.id.repost_vote_friend_opinion_label);		View answerlistView = this.findViewById(R.id.repost_vote_anwser_list);		View taglistView = this.findViewById(R.id.repost_vote_tag_list);		View inputView = this.findViewById(R.id.repost_vote_input_layout);		answerlistView.setVisibility(View.GONE);		taglistView.setVisibility(View.VISIBLE);		inputView.setVisibility(View.VISIBLE);		// tag list view		constructTagListView();		// result list view		// constructResultListView();	}	private void initTagBgColor() {		int i;		for (i = 0; i < 7; ++i) {			int r = 231 - i * 18;			int g = 85 - i * 3;			int b = 85 - i * 3;			mTagBgColor[i] = Color.rgb(r, g, b);		}		for (i = 7; i < 14; ++i) {			int c = 118 + (i - 7) * 14;			mTagBgColor[i] = Color.rgb(c, c, c);		}	}	private ArrayList<String> mTagList = new ArrayList<String>();	private void constructTagListView() {		LinearLayout parent = (LinearLayout) findViewById(R.id.repost_vote_tag_list);		if (mTagList == null) {			parent.setVisibility(View.GONE);			return;		}		if (mTagList.size() == 0) {			parent.setVisibility(View.GONE);			return;		}		parent.removeAllViews();		int screenWidth = getWindowManager().getDefaultDisplay().getWidth();		float totalWidth = screenWidth - 25.0f;		int tagTotalNum = Math.min(mTagList.size(), 15);		/** 可放TAG的剩余空间 */		float surplus = totalWidth;		LinearLayout oneLine = null;		oneLine = new LinearLayout(this);		LayoutParams params = new LayoutParams();		params.width = LayoutParams.FILL_PARENT;		params.height = LayoutParams.WRAP_CONTENT;		params.bottomMargin = 1;		oneLine.setLayoutParams(params);		String tagName = "";		for (int i = 0; i < tagTotalNum; i++) {			KXTagWidget oneTag = (KXTagWidget) getLayoutInflater().inflate(					R.layout.kx_widget_view, null);			tagName = mTagList.get(i);			oneTag.setName(tagName);			oneTag.setTag(i);			oneTag.setBgColor(selectTagBgColor(i), Color.WHITE);			oneTag.setOnClickListener(this.mTagOnClickListener);			this.mTagOnClickListener = new TagOnClickListener();			this.mTagOnTouchListener = new TagOnTouchListener();			oneTag.setOnTouchListener(this.mTagOnTouchListener);			oneTag.setOnClickListener(mTagOnClickListener);			float viewWidth = oneTag.getMesuredWidth();			if (surplus > viewWidth) {// 如果surplus剩余可画空间能容得下oneTag,则在该行放下这个tag并重新计算剩余可画空间surplus				oneLine.addView(oneTag);				surplus -= viewWidth;			} else {// 如果容不下就换一行,并把上一行add进去,初始化surplus				parent.addView(oneLine);				surplus = totalWidth;				oneLine = new LinearLayout(this);				oneLine.setLayoutParams(params);				oneLine.addView(oneTag);				surplus -= viewWidth;			}		}		if (null != oneLine) {			parent.addView(oneLine);		}	}	private int selectTagBgColor(int index) {		if (index < mTagBgColor.length) {			return mTagBgColor[index];		} else {			return mTagBgColor[mTagBgColor.length - 1];		}	}	private int selectVoteBarImage(int index) {		int i = index % VOTE_BAR_IMAGE_NUM;		return mVoteBarImage[i];	}	private void initVoteBarImage() {		mVoteBarImage[0] = R.drawable.votec1;		mVoteBarImage[1] = R.drawable.votec2;		mVoteBarImage[2] = R.drawable.votec3;		mVoteBarImage[3] = R.drawable.votec4;		mVoteBarImage[4] = R.drawable.votec5;		mVoteBarImage[5] = R.drawable.votec6;		mVoteBarImage[6] = R.drawable.votec7;		mVoteBarImage[7] = R.drawable.votec8;		mVoteBarImage[8] = R.drawable.votec9;	}	private class TagOnTouchListener implements OnTouchListener {		@Override		public boolean onTouch(View v, MotionEvent event) {			KXTagWidget tagView = (KXTagWidget) v;			switch (event.getAction()) {			case MotionEvent.ACTION_DOWN: {				CharSequence tagName = tagView.getText();				tagView.setTextColor(tagView.getmPressedTextColor());				tagView.setBackgroundColor(tagView.getmPressedBgColor());			}				break;			case MotionEvent.ACTION_UP:			case MotionEvent.ACTION_OUTSIDE:			case MotionEvent.ACTION_CANCEL: {				tagView.setTextColor(tagView.getmTextColor());				tagView.setBackgroundColor(tagView.getmBgColor());			}				break;			default:				break;			}			return false;		}	}	private class TagOnClickListener implements OnClickListener {		@Override		public void onClick(View view) {			Integer tagIndex = (Integer) view.getTag();			String name = mTagList.get(tagIndex);			Toast.makeText(MainActivity.this, name, Toast.LENGTH_LONG).show();		}	}


代码在http://download.csdn.net/detail/baidu_nod/7711097下载

  相关解决方案