android关于自定义radiobutton做成的横向单选滑动条,在线等答案
话不多说,直接贴上代码!问题是现在运行的时候显示的是空白,完全没有显示出我要加载的数据选项!麻烦各位帮我瞅瞅!
这个是自定义混合控件的代码:
package com.ylibrary.view;
import java.util.ArrayList;
import com.example.yuan_library.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
public class HorizontalListview extends HorizontalScrollView
{
private Context context;
private ArrayList<String> titleList;
private RadioGroup radioGroup;
private ImageView imageView;
private Integer beginIdNum;
private ArrayList<RadioButton> radioButtonLists;
private ArrayList<Integer> radioButtonIdList;
private ArrayList<Integer> radioButtonWidthList;
public HorizontalListview(Context context)
{
super(context);
this.context=context;
initController();
accordingDataShow();
}
public HorizontalListview(Context context, AttributeSet attrs)
{
super(context, attrs);
this.context=context;
initController();
accordingDataShow();
}
public void initController()
{
LinearLayout ll=(LinearLayout) LayoutInflater.from(context).inflate(R.layout.horizontallistview,null);
radioGroup=(RadioGroup)ll.findViewById(R.id.hlistview_radiogroup);
imageView=(ImageView)ll.findViewById(R.id.hlistview_imageview);
radioButtonLists=new ArrayList<RadioButton>();
radioButtonIdList=new ArrayList<Integer>();
radioButtonWidthList= new ArrayList<Integer>();
}
private void accordingDataShow()
{
if(titleList == null || titleList.size() == 0)
{
return;
}
else
{
radioButtonIdList.clear();
radioButtonWidthList.clear();
beginIdNum= 666;
for(int index=0;index<titleList.size();index++)
{
RadioButton button=new RadioButton(context);
button.setId(beginIdNum++);
radioButtonIdList.add(button.getId());
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
params.setMargins(12, 0, 12, 0);
button.setLayoutParams(params);
button.setBottom(0);
button.setText(titleList.get(index));
button.setTextColor(getResources().getColor(R.color.normalblack));
button.setTextSize(14);
button.setBackgroundDrawable(null);
int a=button.getWidth();
radioButtonWidthList.add(button.getWidth()+24);
radioGroup.addView(button);
radioButtonLists.add(button);
}
radioGroup.check(radioButtonIdList.get(0));
RadioButton button=radioButtonLists.get(0);
button.setTextColor(0xff62f787);
imageView.setLayoutParams(new LinearLayout.LayoutParams(radioButtonWidthList.get(radioButtonIdList.get(0)-666),LinearLayout.LayoutParams.MATCH_PARENT));
imageView.setBottom(radioGroup.getCheckedRadioButtonId());
}
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup rg, int currentButtonId)
{
AnimationSet animationSet =new AnimationSet(true);
TranslateAnimation translateAnimation = null;
int begindistance=0;
int enddistance=0;
int beforeButtonId=rg.getCheckedRadioButtonId();//获取之前选中button的id.
rg.check(currentButtonId);//设定当前选中button的id.
for(int beforenum=666;beforenum<beforeButtonId;beforenum++)
begindistance+=radioButtonWidthList.get(beforenum-666);
for(int distanceNum=beforeButtonId;distanceNum<currentButtonId;distanceNum++)
enddistance+=radioButtonWidthList.get(distanceNum-666);
if(currentButtonId>beforeButtonId)
translateAnimation=new TranslateAnimation(begindistance, enddistance, 0, 0);
if(beforeButtonId > currentButtonId)
translateAnimation=new TranslateAnimation(enddistance, begindistance , 0, 0);
animationSet.addAnimation(translateAnimation);
animationSet.setFillAfter(false);
animationSet.setFillAfter(true);
animationSet.setDuration(300);
imageView.startAnimation(animationSet);
}
});
}
public void setTitleList(ArrayList<String> list)
{
titleList=list;
accordingDataShow();
}
}
这个是混合控件的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/light_gray"
android:orientation="vertical" >
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:fadingEdge="@null"
android:scrollbars="none" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/light_gray" >
<RadioGroup
android:id="@+id/hlistview_radiogroup"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:gravity="center_vertical"
android:orientation="horizontal" >
</RadioGroup>
<ImageView
android:id="@+id/hlistview_imageview"
android:layout_width="88dp"
android:layout_height="3dp"
android:layout_alignParentBottom="true"
android:background="@color/green" />
</RelativeLayout>
</HorizontalScrollView>
</LinearLayout>
这个是测试的activity:
package com.demo.activity;
import java.util.ArrayList;
import com.example.yuan_library.R;
import com.ylibrary.view.HorizontalListview;
import android.app.Activity;
import android.os.Bundle;
public class HorizontalListviewDemo extends Activity
{
private HorizontalListview listview;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.horizontallistviewactivity);
listview=(HorizontalListview)findViewById(R.id.listview);
ArrayList<String>list=new ArrayList<String>();
list.add("陈怀雨");
list.add("袁定超");
list.add("袁小龙");
list.add("张梅");
list.add("袁陈成");
list.add("于海涛");
list.add("松本五十六");
list.add("小孩");
listview.setTitleList(list);
onResume();
}
}
这个是测试activity的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.ylibrary.view.HorizontalListview
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>