Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中仅垂直重复图像?_Java_Android_Image - Fatal编程技术网

Java 如何在android中仅垂直重复图像?

Java 如何在android中仅垂直重复图像?,java,android,image,Java,Android,Image,有没有办法在android中只垂直重复一张图片?我试过这样做: <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/asphalt_texture" android:tileMode="repeat" android:dither="true"/> BitmapDrawable draw = (BitmapDrawable)getR

有没有办法在android中只垂直重复一张图片?我试过这样做:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/asphalt_texture"
    android:tileMode="repeat"
    android:dither="true"/>
BitmapDrawable draw = (BitmapDrawable)getResources().getDrawable(R.drawable.draw);
draw.setTileModeY(Shader.TileMode.REPEAT);


但它会双向重复,我只希望它垂直重复,任何想法都会被欣赏

奇怪的是,在XML中似乎没有这样做的方法。然而,通过代码,您可以。以下方法:

你应该做你需要的。只需将其中一个枚举(
REPEAT
MIRROR
CLAMP
)传递给需要重复效果的轴(y轴表示垂直)

因此,您应该能够这样做:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/asphalt_texture"
    android:tileMode="repeat"
    android:dither="true"/>
BitmapDrawable draw = (BitmapDrawable)getResources().getDrawable(R.drawable.draw);
draw.setTileModeY(Shader.TileMode.REPEAT);

我觉得这是直截了当的:(此代码将在Y中平铺,并在x中重复)

在您的OnWindowFoucChanged中,您可以调用:

 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;
    }

嗯,那好像不管用。我这样做了,然后使用image.setImageDrawable(draw);它不会重复。draw.xml是否可以绘制与上面发布的相同,减去tileMode属性?如果我使用draw.setBackgroundDrawable(draw),并同时添加SetTileMode和SetTileMode,它会起作用,但这不符合垂直绘制的目的。
draw.setBackgroundDrawable(draw)
?自行设置?我假设这只是一个打字错误,但是的,如果这不起作用,我没有任何其他建议要补充,不幸的是:(哈哈,是的,那是个打字错误,好吧,我会设法弄清楚的,谢谢你的帮助:)