6

Androidで画像を垂直方向にのみ繰り返す方法はありますか?私はこのようにそれを試しました:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/asphalt_texture"
    android:tileMode="repeat"
    android:dither="true"/>

しかし、それは両方の方法で繰り返され、私はそれを垂直に繰り返したいだけです、どんなアイデアでもいただければ幸いです!

4

2 に答える 2

6

奇妙なことに、XML でこれを行う方法はないようです。ただし、コードを介して可能です。次の方法:

BitmapDrawable.setTileModeX(Shader.TileMode mode) BitmapDrawable.setTileModeY(Shader.TileMode mode)

必要なことをする必要があります。反復効果が必要な軸 (垂直の場合は y 軸)のShader.TileMode列挙型 ( REPEATMIRROR、 )の 1 つを渡すだけです。CLAMP

したがって、次のようなことができるはずです。

BitmapDrawable draw = (BitmapDrawable)getResources().getDrawable(R.drawable.draw);
draw.setTileModeY(Shader.TileMode.REPEAT);
于 2012-07-22T19:37:20.603 に答える
1

私はそれが簡単だと感じます:(このコードは Y でタイル表示され、x で繰り返されます)

onWindowFoucsChanged で次のように呼び出します。

 public void onWindowFocusChanged(boolean hasFocus) {
        // TODO Auto-generated method stub
        super.onWindowFocusChanged(hasFocus);
        Drawable d = getRepeatingBG(this, R.drawable.image_that_you_want_to_repeat);
        body_view.setBackgroundDrawable(d);

    }

private Drawable getRepeatingBG(Activity activity, int center)
    {   

        DisplayMetrics dm = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(dm);

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled=true;

        Bitmap center_bmp = BitmapFactory.decodeResource(activity.getResources(), center, options);
        center_bmp.setDensity(Bitmap.DENSITY_NONE);
        center_bmp=Bitmap.createScaledBitmap(center_bmp, dm.widthPixels , center_bmp.getHeight(), true);

        BitmapDrawable center_drawable = new BitmapDrawable(activity.getResources(),center_bmp);
//change here setTileModeY to setTileModeX if you want to repear in X
        center_drawable.setTileModeY(Shader.TileMode.REPEAT);

        return center_drawable;
    }
于 2013-06-26T07:56:50.110 に答える