1

独自のカスタム「プログレス バー」を作成したいと考えています。これは、それぞれ異なる色の線形レイアウトに描画することで行います。その後、それぞれに幅を割り当てて、進行状況バーのように見せたいと思います。私が今持っているもの:

私の CustomAdapter の項目の XML ファイル (Gridview 内):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#33c2bd" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/lineScore"
        android:layout_width="20dp"
        android:layout_height="2dp"
        android:background="#eef05e" 
        android:paddingLeft="20dp"
        android:paddingTop="0dp"
        android:paddingBottom="20dp"
        android:layout_below="@+id/tvLevelScore"/>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/lineScoreTotal"
        android:layout_width="20dp"
        android:layout_height="2dp"
        android:background="#0d7975" 
        android:paddingRight="20dp"
        android:paddingTop="0dp"
        android:paddingBottom="20dp"
        android:layout_below="@+id/tvLevelScore"
        android:layout_toRightOf="@+id/lineScore"/>

</RelativeLayout>

次に、getView メソッドの下の CustomAdapter クラスで、lineScoreTotal をアイテムの幅の 80% に設定しようとしています。

double viewWidth = (double) mView.getWidth();
            int widthScoreBar = (int) (viewWidth * 0.8);
            LinearLayout ln = (LinearLayout) mView.findViewById(R.id.lineScoreTotal);
            ln.layout(0, 2, widthScoreBar, -1);

しかし、それは何もしていません...幅を設定するために間違ったコードを適用していますか? または、これらの「バー」を描画するために LinearLayout を使用するという私の考えは、間違っているのでしょうか?

getView メソッドを編集します。

@Override
    public View getView(int position, View v, ViewGroup parent) {
        View mView = v;

        if (mView == null) {

            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            mView = vi.inflate(R.layout.levelselector_item, null);

        }

        TextView level = (TextView) mView.findViewById(R.id.tvLevel);
        TextView levelScore = (TextView) mView.findViewById(R.id.tvLevelScore);

        if (mView != null) {

            level.setText(Integer.toString(getItem(position).getLevel()));

            loadDataBase();
            int correctAnswers = myDbHelper.getCorrectAnswers(getItem(position).getLevel());
            correctAnswersPrev = 0;
            correctAnswersPrev = myDbHelper.getCorrectAnswersPrev(getItem(position).getLevel());

            String correct = Integer.toString(correctAnswers);

            levelScore.setText(correct + "/60");
            level.setTypeface(font);
            levelScore.setTypeface(font);

            LinearLayout ln = (LinearLayout) mView.findViewById(R.id.lineScoreTotal);
            ln.setLayoutParams(new FrameLayout.LayoutParams(10, 10));
}
        return mView;
    }
4

2 に答える 2

3

いずれかの方法を試してください

無重力

ln.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

または重力で

ln.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT,1f));
于 2012-10-03T09:52:57.457 に答える
0
ln.setLayoutParams(new
       LayoutParams(widthScoreBar,LayoutParams.WRAP_CONTENT));

LayoutParams を使用して設定してみてください。

于 2012-10-03T09:53:27.590 に答える