0

グリッドビューの画像がhdpiとxhdpiに適合しません。mdpiエミュレーターとデバイスに適切に適合します。私の画像サイズは以下のとおりです(3:4:6:8の比率に従います)。

ldpi 366 * 225 mdpi 488 *300//エミュレーターとデバイスの画面に適切に適合しますhdpi732* 450 Xhdpi 976 * 600

1番目の画像(MDPI)が画面に正しく収まり、2番目の画像(XHDPIはHDPIと同じ)が収まりませんか?

MDPI

XHDPI

MenuActivity:

GridView gridView = (GridView) findViewById(R.id.gridview);

    gridView.setAdapter(new ImageAdapter(this));


    gridView.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_MOVE){
                return true;
            }
            return false;
        }
    });

    gridView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
    gridView.setVerticalScrollBarEnabled(false);

ImageAdapter.java:

public class ImageAdapter extends BaseAdapter {

    private Context mcontext;

    public ImageAdapter(Context c) {
        mcontext=c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        ImageView imageView ;

        if(convertView==null)
        {
            imageView = new ImageView(mcontext);
            //imageView.inflate(mcontext, R.layout.mainmenu_griditem,null);
            ImageView.inflate(mcontext, R.layout.mainmenu_griditem,null);

            WindowManager wm = (WindowManager) mcontext.getSystemService(Context.WINDOW_SERVICE);

            Display display = wm.getDefaultDisplay();
            DisplayMetrics outMetrics = new DisplayMetrics ();
            display.getMetrics(outMetrics);

            float density  = mcontext.getResources().getDisplayMetrics().density;

            Log.i("image","density->"+density);
            float dpHeight = outMetrics.heightPixels / density;
            Log.i("image","dpHeight->"+dpHeight);
            float dpWidth  = outMetrics.widthPixels / density;
            Log.i("image","dpWidth->"+dpWidth);

            int width=(int) (dpWidth/2);
            int height=(int) (dpHeight/2.3);

            Log.i("image","Image Width->"+width);
            Log.i("image","Image height->"+height);

            //int width=(int) (dpWidth);
            //int height=(int) (dpHeight);

            //imageView.setLayoutParams(new GridView.LayoutParams(width,height));


            imageView.setLayoutParams(new GridView.LayoutParams(width,height));





            //imageView.setLayoutParams(new GridView.LayoutParams(parent.getWidth()/2,parent.getHeight()/2));


            //imageView.setLayoutParams(new GridView.LayoutParams(imageView.getWidth(),imageView.getHeight()));

            //imageView.setBackgroundColor(000000);
            //imageView.setLayoutParams(new GridView.LayoutParams(400,200));
            //imageView.setLayoutParams(new GridView.LayoutParams());
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            //imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            //imageView.setPadding(40,40,40,40);
        }
        else
        {
            imageView=(ImageView)convertView;
        }


        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }


    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.mainmenu1, R.drawable.mainmenu2,
            R.drawable.mainmenu3, R.drawable.mainmenu4
    };
}

私はたくさん試しましたが、助けにはなりませんでした。

mainmenugriditem.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView android:id="@+id/mm_grid_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

       />
    <TextView android:id="@+id/mm_grid_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:labelFor="@id/mm_grid_image"/>

</RelativeLayout>

MDPIのLogcat出力:(Emulator-7 "WSVGA-tablet-1024 * 600:mdpi)

Logcat-MDPI

XHDPIのLogcat出力:(エミュレーター-Galaxy Nexus-4.65 "-720 * 1280:xhdpi)

Logcat-XHDPI

4

2 に答える 2

0

MDPI解像度用にビットマップを設計しました(MDPIでは1 px = 1 dpであるため)。次に、 http://labs.skinkers.com/content/android_dp_px_calculator/を使用して他の解像度バケットに変換します

次のコードを変更します。

これを変える:

                Log.i("image","density->"+density);
                float dpHeight = outMetrics.heightPixels / density;
                Log.i("image","dpHeight->"+dpHeight);
                float dpWidth  = outMetrics.widthPixels / density;
                Log.i("image","dpWidth->"+dpWidth);

に :

            float dpHeight = outMetrics.heightPixels;
            float dpWidth  = outMetrics.widthPixels;
于 2013-03-21T01:46:25.407 に答える
0

こんにちは、このように作成しない場合は、画面サイズごとに別々のフォルダを作成しましたか

レイアウト-小さい

レイアウト-大

レイアウト-xlarge

次に、レイアウトXMLファイルをこれらのフォルダーにコピーし、パレットウィンドウでXhdpiのプレビューを確認して、デフォルトの画面サイズが10インチになっていることを確認して、レイアウトのグリッドビューを調整できるようにします。

于 2013-03-06T04:13:38.207 に答える