相关疑难解决方法(0)

多梯度形状

我想创建一个类似下图的形状:

替代文字

注意从颜色1到颜色2的上半部分渐变,但是从颜​​色3到颜色4渐变的下半部分.我知道如何使用单个渐变制作形状,但我不确定如何将形状分割成两半,并制作1个形状,2个不同的渐变.

有任何想法吗?

android gradient shapes

174
推荐指数
2
解决办法
10万
查看次数

片段 - removeGlobalOnLayoutListener IllegalStateException

我试图得到的高度和宽度ImageViewFragment有以下ViewTreeObserver:

import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;

private ImageView imageViewPicture;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_general_activity_add_recipe, container, false);
    setHasOptionsMenu(true);

    ...

    final ViewTreeObserver observer = imageViewPicture.getViewTreeObserver();
    observer.addOnGlobalLayoutListener (new OnGlobalLayoutListener () {
        @Override public void onGlobalLayout() {
            observer.removeGlobalOnLayoutListener(this);
        }
    });

    return view;
}
Run Code Online (Sandbox Code Playgroud)

运行此代码会导致以下异常:

10-12 23:45:26.145: E/AndroidRuntime(12592): FATAL EXCEPTION: main
10-12 23:45:26.145: E/AndroidRuntime(12592): java.lang.IllegalStateException: This ViewTreeObserver is not alive, call getViewTreeObserver() again
10-12 23:45:26.145: E/AndroidRuntime(12592):     at android.view.ViewTreeObserver.checkIsAlive(ViewTreeObserver.java:509)
10-12 23:45:26.145: E/AndroidRuntime(12592): …
Run Code Online (Sandbox Code Playgroud)

android android-view

18
推荐指数
2
解决办法
2万
查看次数

如何在Android中完全加载ImageView时获取

我正在开发一个应用程序,它在一堆图像上绘制线条.为了选择这些图像,我有一个广播组,每当用户点击一个单选按钮时,图像就会加载所有图纸.

在我的收音机听众中,我有以下代码:

bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);

mImage.setDrawLines(true);
mImage.setImageBitmap(loadBitmapFromView(mImage));
Run Code Online (Sandbox Code Playgroud)

decodeSampledBitmapFromResource我从Android开发人员的这个链接获得的方法(它更有效地加载位图)http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

这是我调用以获取视图位图的方法

    public static Bitmap loadBitmapFromView(View v) {
        Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
        Canvas c = new Canvas(b);
        v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
        v.draw(c);
        return b;
}
Run Code Online (Sandbox Code Playgroud)

我正在设置图像Bitmap,mImage因为我正在使用ImageViewTouch库(它可以在ImageView上进行缩放缩放),如果我不这样做,所有画布绘图都会被删除,图像上的任何交互都会被删除(比如放大/出).

错误日志如下

07-11 21:13:41.567: E/AndroidRuntime(20056): java.lang.IllegalArgumentException: width and height must be > 0
07-11 21:13:41.567: E/AndroidRuntime(20056):    at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
07-11 21:13:41.567: E/AndroidRuntime(20056):    at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
Run Code Online (Sandbox Code Playgroud)

我几乎可以肯定这个错误正在发生,因为当我调用getBitmapFromView方法时图像位图没有完全加载.

如何知道视图何时完全加载?

android bitmap imageview android-canvas

13
推荐指数
2
解决办法
9284
查看次数

以编程方式更改Android Overflow菜单图标

我一直在寻找一种方法来以编程方式更改android中溢出菜单图标的颜色.

我找到的唯一选择是通过添加自定义样式永久更改图标.问题是,在不久的将来,我们需要在使用我们的应用程序时更改此设置.

我们的应用程序是一系列在线平台的扩展,因此用户可以进入其平台的web-url.它们有自己的样式,并将通过API调用来获取应用程序.

这些可能会让我改变图标的​​颜色......

目前我更改了Actionbar中的其他图标,如下所示:

if (ib != null){
            Drawable resIcon = getResources().getDrawable(R.drawable.navigation_refresh);
            resIcon.mutate().setColorFilter(StyleClass.getColor("color_navigation_icon_overlay"), PorterDuff.Mode.SRC_ATOP);
            ib.setIcon(resIcon);
}
Run Code Online (Sandbox Code Playgroud)

现在我将不得不使用这些风格.

android android-actionbar

13
推荐指数
5
解决办法
3万
查看次数

Android:DialogFragment中的位图大小超过32位

这不是Android开发者控制台神秘堆栈跟踪的重复(位图大小超过32位)

这个问题没有提供单行代码,也没有答案; 此外,即使我将位图大小设置为32x32,我也会收到此错误,它是唯一的Bitmap,因此它与内存无关.

我想做的事

  1. 获取ImageView的大小,
  2. 创建一个BitMap
  3. 并在画布上画一些东西.

所述Log.e用于ImageView的大小,因此位图输出为:

Width: 272
Height: 136
Run Code Online (Sandbox Code Playgroud)

怎么了

以下代码适用于Nexus4,Nexus7和Desire HD(CM10),但在模拟器上运行应用程序会给出如下所示的错误(API 8).

发现

  1. 我尝试过它的一半大小和32x32,这给出了同样的错误.

  2. 我在DialogFragment中显示ImageView(针对API 8的ActionBarSherlock/HoloEveryWhere),也许这就是罪魁祸首?

ImageView的:

<ImageView
      android:id="@+id/imageView1"
      android:layout_width="match_parent"
      android:layout_height="1dp"
      android:layout_marginBottom="12dp"
      android:layout_marginTop="12dp" />
Run Code Online (Sandbox Code Playgroud)

在我的活动中:

iv = (ImageView) view.findViewById(R.id.imageView1);
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
         if (!waveFormMeasured) {
             if (iv.getMeasuredWidth() > 1) {
                 width = iv.getMeasuredWidth();
                 Log.e(TAG, "Width: " + width + " Height: " + width / 2);
                 waveBitmap = Bitmap.createBitmap((int) width, …
Run Code Online (Sandbox Code Playgroud)

android bitmap imageview

5
推荐指数
1
解决办法
4697
查看次数

渲染前测量多行TextView的高度

我已经尝试到了什么:

  1. 呼唤 measure()

    tv.measure(0, 0);
    int height = tv.getMeasuredHeight();
    
    Run Code Online (Sandbox Code Playgroud)
  2. measure()以指定的尺寸/模式进行呼叫

    int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(99999, View.MeasureSpec.AT_MOST);
    int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
    tv.measure(widthMeasureSpec, heightMeasureSpec);
    int height = tv.getMeasuredHeight();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 呼唤 getTextBounds()

    Rect bounds = new Rect();
    tv.getPaint().getTextBounds(tv.getText().toString(), 0, tv.getText().length(), bounds);
    int height = bounds.height();
    
    Run Code Online (Sandbox Code Playgroud)
  4. 先打电话measure()再打电话getTextBounds()

  5. 呼唤 getLineCount() * getLineHeight()

似乎没有任何工作。它们都返回不正确的值(容器视图的高度不正确-太小或太大)

关于如何计算这个简单事情的想法?

java android textview

5
推荐指数
2
解决办法
2446
查看次数

Android:生成视图的位图而不绘图

我们在从特定视图生成位图时遇到问题.限制是它无法呈现视图(绘图).有没有人有任何提示如何解决这个问题?

类视图的文档(http://developer.android.com/reference/android/view/View.html)对Android用于呈现View的步骤有一些解释.在这种情况下,我们将进入"布局",而不是"绘图".谁有任何想法,可以展示一个例子?

我的代码生成异常:错误 - >宽度和高度必须> 0

...
public static Bitmap loadBitmapFromView(View v) {
    Bitmap b = null;
    try {
        b = Bitmap.createBitmap(
                v.getWidth(),
                v.getHeight(), 
                Bitmap.Config.ARGB_8888);                
        Canvas c = new Canvas(b);
        v.measure(v.getWidth(), v.getHeight()); 
        v.layout(0, 0, v.getWidth(), v.getHeight());
        v.draw(c);

    } catch (Exception e) {

        Log.e(MainActivity.TAG, "error -> "+e.getMessage());
    }



    return b;
}


public void snap(View v) {


    LayoutInflater inflate = (LayoutInflater) getBaseContext()
            .getSystemService(LAYOUT_INFLATER_SERVICE);
    View view = new View(getBaseContext());
    view = inflate.inflate(R.layout.list_item, null);


    Log.d(MainActivity.TAG, "getWidth -> "+view.getWidth());
    Log.d(MainActivity.TAG, "getHeight   -> "+view.getHeight()); …
Run Code Online (Sandbox Code Playgroud)

android android-canvas

2
推荐指数
1
解决办法
1815
查看次数