问题是关于android开发,更确切地说是关于按钮和cumstom视图.我正在使用线性布局中的四个按钮和一个我绘制图像的自定义视图.当我使用方法执行此操作时(我重写onDraw())一切正常,除了按下按钮时我的按钮反应很慢.只需删除onDraw函数,它们就可以快速运行.所以,我的问题是:为什么这些按钮工作得那么慢?我只是找不到原因!我是否必须在自定义视图中使用自己创建的按钮?
以及如何解决这个问题?
Thsi是我使用onDraw方法的类:
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.ImageView;
public class test extends ImageView{  
Context mContext;
String[] medium;
final int pspawn[]={64,32};
public test(Context context, AttributeSet attrs) {         
    super(context, attrs);
    mContext = context;
}
private String getMapInfo(Integer counter){
    String[] mapArray = TextUtils.split(map, " ");
    return mapArray[counter];
}
public void onDraw(Canvas canvas){
    int x = 0;
    int y = 0;
    for(int i = 0; i<100; i = i+1)
    {
        String mapinfo = getMapInfo(i);
        if (mapinfo.equals("x"))
        { …我正在努力CustomView从另一个应用程序获取.假设我有两个应用程序A和B. CustomView例如,我知道包名称com.applicationb.CustomView.是否可以在运行时在应用程序A中创建此类的对象?
我的目标是找到一种方法来创建CustomViews并能够在我的应用程序中显示它们.但我希望他们(视图)是一个单独的apk,可以发布到Android Market,并作为某种扩展名下载.
CustomView只会在屏幕上显示一些动画(例如落叶).它不适用于第一个应用程序中的任何数据.
我找到了这样的东西:
@SuppressWarnings("rawtypes")
Class c = Class.forName(package_name);
Method m = c.getDeclaredMethod(method_name);
m.setAccessible(true);
Canvas can= (Canvas) m.invoke(null, null); // since there are no parameters, and called function is static
我希望这会奏效.我回头告诉你.
我有自定义视图,我想在xml文件中添加我尝试这样但我收到此错误
  Custom view TouchImageView is not using the 2- or 3-argument View constructors;
  XML attributes will not work
这是我正在使用的xml ..
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 <view 
   class="com.zoom.TouchImageView"
   android:id="@+id/webView1"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent" />
</LinearLayout>
我正在使用Xamarin Monodroid将我的一些Windows Phone应用程序移植到Android.
我对Xamarin的东西很新,实际上只是买了一张牌照.
到目前为止,在AXML中重新创建XAML UI非常好,但我遇到了自定义控件的问题.
这就是我所说的自定义控件:
在.NET中,我通过创建继承自'UserControl'类的类创建了一堆控件,我创建了逻辑并设置了内容.然后我用'new my_control()'等创建新实例......
我的一些控件不是以这种方式创建的,而是通过定义XAML来创建UserControl,其中没有特定的逻辑,但是当我需要组合2个或更多控件时(例如,带有文本的彩色正方形,所以Rectangle + TextBlock)我再次需要做'new my_control()'并将其添加到XAML UI(Grid,ListBox,StackPanel等)中的某个位置.
我怎么能用Monodroid实现类似的东西?
提前致谢!
我正在使用自定义搜索栏来显示图表.我做到这一点.我通过将可绘制的背景应用于搜索栏来显示此图.现在我的问题是,我需要将蓝色设置为可绘制的进度,并需要将搜索条的背景设置为红色图形.因此,当进展发生时,拇指移动过红色,拇指通过的区域应该像掩蔽效果一样变为蓝色.任何人都可以告诉最好的方法来做到这一点.我的照片如下所示

解决了...
我有一个包含一些其他控件的复合视图.我想重写保存onSaveInstanceState和onRestoreInstanceState,但我得到一个奇怪的结果.
该Parcelable state给的说法onRestoreInstanceState是不是我的自定义子类的BaseSavedState,SavedState并且似乎总是BaseSavedState.EMPTY_STATE.(在下面查找"总是失败"的代码注释...
看起来这个问题很可能出现在保存部分,因为  几乎SavedState.writeToParcel没有被调用之后onSaveInstanceState enters.几乎就好像正在调用的人onSaveInstanceState在将结果持久化之前抛弃结果Parcel.
如果它有所不同,则此视图托管在片段中.
有任何想法吗?
这是我的班级定义:
public class AddressInput extends FrameLayout
这是我的onSaveInstanceState和onRestoreInstanceState一对:
@Override
protected Parcelable onSaveInstanceState()
{
    // Return saved state
    Parcelable superState = super.onSaveInstanceState();
    return new AddressInput.SavedState( superState, mCurrentLookUp );
}
@Override
protected void onRestoreInstanceState( Parcelable state )
{
    // **** (state == BaseSavedState.EMPTY_STATE) is also always …android state custom-view android-custom-view onrestoreinstancestate
我有一个活动,它使用以下代码为整个活动的视图添加自定义视图
activity.getWindow().getDecorView()).addView(newView)
为了显示教练标记/使用标记的屏幕.
我的自定义视图从RelativeLayout扩展而来,在其构造函数中,在屏幕底部添加了一个按钮,当单击该按钮时,将取消视图.
我已经覆盖了"dispatchDraw"方法,以便我可以在特定位置的布局中添加多个coachmark UI对象(textview和bitmaps).这些coachmark对象使用如下代码在视图上绘制自己
        canvas.save();
        canvas.translate(positioning[0], positioning[1]);
        textView.draw(canvas);
        canvas.restore();
        canvas.save();
        canvas.drawBitmap(bitmap, positioning[2], positioning[3], new Paint());
        canvas.restore();
ISSUE:启用TalkBack时
然而,当用户按下按钮时,按钮的内容描述被大声读出.
我假设textViews和Bitmaps未被读出的原因是由于我们上面的代码在画布上呈现它们的方式.
问题1:当点击textview和位图时,有没有办法让TalkBack大声说出什么? - 我已经尝试设置contentDescriptions并可以专注于textviews和位图,但这没有任何区别.
问题2:另一种方法是让TalkBack在显示自定义视图时读出内容,并且此文本可以汇总屏幕中显示的所有主题标记.我无法解决如何做到这一点,有没有人有任何建议? - 我已经尝试将我的customView设置为可聚焦(setFocasable(true)并给它一个contentDescription但这不起作用. - 我已经尝试在绘制自定义视图时发起操作,然后向事件添加内容描述但是这个也不起作用,即
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
}
@Override
public void onInitializeAccessibilityNodeInfo (AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    // this is not read out load when the view is displayed, but is read when the view is pressed
    info.setContentDescription("on Initialize Accessibility Node Info User Tips");
}
我知道在onDraw方法内创建对象的成本非常高。drawRoundRect我想绘制一个圆角矩形矩阵,其坐标是动态的,并且我无法缓存所有矩形,因为我使用滚动视图并且可能有很多矩形,方法没有其他重载,该方法具有基元参数,我强制在每次迭代中创建一个 Rectangle 对象。谁能提出有效的解决方案?
@Override
protected void onDraw(Canvas canvas) {
    int h = getMeasuredHeight();
    int tileSize = h / rows;
    for(int i = 0; i < rows; ++i) {
        for(int j = 0; j < columns; ++j) {
            int x = j * tileSize;
            int y = i * tileSize;
            canvas.drawRoundRect(new RectF(x, y, x + tileSize, y + tileSize), 10, 10, tilePaint);
        }
    }
}
这只是一个例子,矩形可以具有任意坐标。
我想把一个自定义视图放在一个UIAlertController.我在调整自定义视图的大小时遇到了一些奇怪的问题.
我想自定义视图跨越的宽度UIAlertController,无论可能是什么.我正在使用CGRectGetWidth(alertController.view.bounds)获取警报控制器的宽度.但是,这似乎是返回整个视图的宽度.使用view.frame并没有什么区别.
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"My Title" message:nil preferredStyle:UIAlertControllerStyleAlert];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(alertController.view.bounds), 50)];
view.backgroundColor = [UIColor blueColor];
[alertController.view addSubview:view];
[self presentViewController:alertController animated:YES completion:nil];
这产生了以下结果.我有同样的问题试图获得的X,Y宽度和高度属性UIAlertController.有没有人知道如何在不使用硬编码数字的情况下将此视图放在警报控制器的中间?
我正在使用自定义视图,我想使用path.lineTo()和path.arcTo()方法构建一个圆角矩形。
所以,我想要得到的矩形:  
通常我用这段代码来绘制它:
    RectF backReftf = new RectF();
    Path path = new Path();
    int width = getWidth();
    int height = getHeight();
    float curve = (float) (0.1 *  height);
    RectF backReftf = new RectF();
    backReftf.left = 0;
    backReftf.top = 0;
    backReftf.right = width;
    backReftf.bottom = height;
    path.addRoundRect(backReftf, curve, curve, Path.Direction.CW);
    canvas.drawPath(path, paint);
但我想用path.lineTo()和来画这个path.arcTo()。
根据文件arcTo():  
将指定的圆弧作为新轮廓附加到路径。如果路径的起点与路径当前的最后一个点不同,则会添加自动 lineTo() 以将当前轮廓连接到圆弧的起点。但是,如果路径为空,则我们使用弧的第一个点调用 moveTo()。
所以理论上我的弧应该从那里开始,也就是线条结束的地方,所以如果我画一条线(矩形的左侧):
    float curve = (float) (0.1 *  height);
    path.moveTo(0,0);
    path.lineTo(0, height - curve); …