Android背景图片裁剪

时间:2015-10-20 15:27:08

标签: android

首先说我是android开发的新手,但我有使用c ++,python,php& mysql以及html和css开发的经验。

我正在玩基于文本的在线mmorpg。最近,他们添加了使用API​​密钥以访问个人帐户信息的能力(例如,查看您的能量,冷却时间等)。所以我开始想我会像“看”这样的应用程序,它可以在例如你的冷却时间结束了。所以你唯一需要做的就是输入你的api密钥。如果我让这个应用程序工作(没有时间框架,因为第一个将用于我的使用)我当然会与其他用户分享。无论如何,解决问题!

我正在搜索谷歌和stackoverflow以寻找类似的问题,我唯一偶然发现的有用的是:Android crop background,但这并不能解决我的问题。

我的图片大小为496x60。如果设备宽度小于图像宽度,我想要水平裁剪此图像,并且要有100%的高度。这是我正在使用的图像(从官方的PC应用程序,但没有Android手机的应用程序):logotorn1(链接在最后)

现在我到目前为止做了什么(我有按钮,输入密钥框,一些文字但删除了它们,所以只有这个atm),这是(我在我的huawei y330手机上运行应用程序): 1

这个图像看起来有点挤压,所以我决定手动裁剪第一个并用当前图像替换它。这是第二张图片:logotorn2

这是结果:2

到目前为止,这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent"
    android:layout_height="fill_parent"  tools:context=".MainActivity"
    android:foregroundGravity="top"
    android:gravity="top"
    android:background="@drawable/bgimg">


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:id="@+id/imageView"
            android:background="@drawable/lel"
            android:layout_gravity="left|top"
            android:scaleType="centerCrop"/>
    </FrameLayout>
</RelativeLayout>

MainActivity.java代码与(?)atm无关,所以我不会发布它。

所以,问题是,我忽略了什么或我做错了什么?

提前感谢您提供的任何帮助。

P.S。我已将所有图片发布在一个链接中,因为我的名声似乎只能发布2个链接。

images

4 个答案:

答案 0 :(得分:0)

我以前没有确切的解决方案我曾经使用Android裁剪图像:

 public static ArrayList<Bitmap> splitImage(Context context, Bitmap bitmap, int rows, int cols) {
    final BitmapFactory.Options options = new BitmapFactory.Options();

    int chunkNumbers = rows * cols;
    ArrayList<Bitmap> chunkedImages = new ArrayList<>(chunkNumbers);
    int chunkHeight = bitmap.getHeight() / rows;
    int chunkWidth = bitmap.getWidth() / cols;
    Log.d("CHUNK",chunkHeight + " " + chunkWidth);
    int xCoord;
    int yCoord = 0;
    for (int x = 0; x < rows; x++) {
        xCoord = 0;
        for (int y = 0; y < cols; y++) {
            chunkedImages.add(Bitmap.createBitmap(bitmap, xCoord, yCoord, chunkWidth, chunkHeight));
            xCoord += chunkWidth;
        }
        yCoord += chunkHeight;
    }
    bitmap.recycle();
    System.gc();
    return chunkedImages;
}

此方法在一定数量的chunkes中裁剪图像。 顺便说一下,你必须获得你的屏幕设备的实际宽度和高度,你可以通过覆盖onMeasure来获得它。

希望它可以帮助你,再见!

答案 1 :(得分:0)

尝试使用android:maxWidth="496px"到ImageView。这样,如果视图小于496像素(图像的宽度),它将仅水平缩放。另外,请查看this question,我认为这两个答案可能对您有所帮助。

答案 2 :(得分:0)

如果我沿着正确的方向思考,您可以尝试以编程方式从您的activity.java中获取设备宽度(

export default class Root extends React.Component { constructor(props) { super(props); this.state = { hideNavBar: false, }; } render(){ let navBar = null; if (! this.state.hideNavBar) { navBar = ( <Navigator.NavigationBar routeMapper={NavigationBarRouteMapper} /> ); } return ( <Navigator initialRoute={Routes.SubdomainScreen} renderScene={Router.renderScene} configureScene={Router.configureScene} onWillFocus={this.onNavWillFocus.bind(this)} navigationBar={navBar} style={styles.container} /> ) } onNavWillFocus(route) { if (route.hideNavBar !== undefined && this.state.hideNavBar !== route.hideNavBar) { this.setState({hideNavBar: route.hideNavBar}); } } }

然后将位图设置为您希望

使用的完整图像

Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x;

并使用

调整此位图的宽度

Bitmap b = (Bitmap)findViewById(R.drawable.YOUR_IMAGE)

其中&#39;宽度&#39;是先前获得的设备宽度(以像素为单位),并且&#39; ORIGINAL_HEIGHT&#39;是图像的原始高度(以像素为单位)。

然后,您可以将此新裁剪的图像设置为您在布局中设置的图像视图

b = Bitmap.createBitmap(b, 0, 0, width, ORIGINAL_HEIGHT);

我希望这有帮助!

答案 3 :(得分:0)

解决方案比我想象的要简单得多。问题出在android:background而不是android:src。我确实实现了java代码和位图变量以及OnMeasure,但在仔细观察后,不需要任何java代码。因此,如果您遇到背景裁剪问题,请先检查您的图片是android:src="@drawable/name_of_your_image"而不是android:background="@drawable/name_of_your_image"

谢谢大家的帮助,很抱歉打扰你。