首先说我是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个链接。
答案 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"
。
谢谢大家的帮助,很抱歉打扰你。
赫