Android 转换文本视图->;位图->;ImageView和nothing';她来了
我开始了一个测试项目,就是为了把它写下来。未对main.xml进行任何更改。我想创建一个小部件大小的ImageView(80x100),其中包含从TextView转换的位图。是的,这听起来很迂回,但这只是为了测试;最后,我希望ImageView有一个背景图像和多个文本视图。我不确定我到底做错了什么,但没有任何东西被推到屏幕上 声明TextView/ImageView并在构造函数中传递它“this”是否有问题?我的布局参数有问题吗?代码如下:Android 转换文本视图->;位图->;ImageView和nothing';她来了,android,android-widget,android-layout,Android,Android Widget,Android Layout,我开始了一个测试项目,就是为了把它写下来。未对main.xml进行任何更改。我想创建一个小部件大小的ImageView(80x100),其中包含从TextView转换的位图。是的,这听起来很迂回,但这只是为了测试;最后,我希望ImageView有一个背景图像和多个文本视图。我不确定我到底做错了什么,但没有任何东西被推到屏幕上 声明TextView/ImageView并在构造函数中传递它“this”是否有问题?我的布局参数有问题吗?代码如下: package com.doaf.testprojec
package com.doaf.testproject;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class TestProject extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80, 100);
tv.setLayoutParams(layoutParams);
tv.setText("testing 1 2 3");
tv.setTextColor(0xFFFFFF);
tv.setBackgroundColor(0x555555);
Bitmap testB;
testB = loadBitmapFromView(tv);
ImageView iv = new ImageView(this);
iv.setLayoutParams(layoutParams);
iv.setBackgroundColor(0x555555);
iv.setImageBitmap(testB);
setContentView(iv);
}
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap(80, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, 80, 100);
v.draw(c);
return b;
}
}
谢谢你能提供的帮助。我对安卓系统比较陌生,对这一点很感兴趣。快速修改代码,试试这个,看看它是否是你想要的:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80, 100);
tv.setLayoutParams(layoutParams);
tv.setText("testing 1 2 3");
tv.setTextColor(Color.BLACK);
tv.setBackgroundColor(Color.TRANSPARENT);
Bitmap testB;
testB = Bitmap.createBitmap(80, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(testB);
tv.layout(0, 0, 80, 100);
tv.draw(c);
ImageView iv = new ImageView(this);
iv.setLayoutParams(layoutParams);
iv.setBackgroundColor(Color.GRAY);
iv.setImageBitmap(testB);
setContentView(iv);
}
我相信它占据了整个屏幕,因为你没有一个容器,比如线性布局,它包含一个带有布局约束的ImageView,所以ImageView会扩展以填充可用的屏幕。试试这个:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(80, 100);
tv.setLayoutParams(layoutParams);
tv.setText("testing 1 2 3");
tv.setTextColor(Color.BLACK);
tv.setBackgroundColor(Color.TRANSPARENT);
Bitmap testB;
testB = Bitmap.createBitmap(80, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(testB);
tv.layout(0, 0, 80, 100);
tv.draw(c);
ImageView iv = (ImageView)findViewById(R.id.menuIcon);
iv.setLayoutParams(layoutParams);
iv.setBackgroundColor(Color.GRAY);
iv.setImageBitmap(testB);
iv.setMaxHeight(80);
iv.setMaxWidth(80);
}
在main.xml文件中:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView android:id="@+id/menuIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
我不确定您想要实现什么,但我确信有更有效的方法来实现它。在绘制文本视图之前,需要对其进行测量(调用measure())和布局(调用layout())。你两个都不做。这听起来真是个坏主意。@Rockmaninoff:你在使用自定义布局吗?@Tilsan战斗机:我计划使用自定义布局。最终目的是生成一个由可选背景图像和几个文本视图组成的线性布局,然后将该线性布局导出到位图,然后导出到小部件的背景(ImageView?)。@Falmari:你为什么这么说?嗨,迈克,这绝对是朝着正确方向迈出的一步。背景和文本正在渲染,但它们填满了整个屏幕。你能解释一下为什么这个特定的代码有效而我的代码无效(试着在这里学习),以及为什么它可能会出现在屏幕上?我的直觉是,它与布局参数有关……或者可能需要将iv放置在布局中,以防止它填满屏幕。谢谢