小编Leo*_*Leo的帖子

如何从Swift的原始值中获取枚举?

我正在尝试从原始值获取枚举类型:

enum TestEnum: String {
    case Name
    case Gender
    case Birth

    var rawValue: String {
        switch self {
        case .Name: return "Name"
        case .Gender: return "Gender"
        case .Birth: return "Birth Day"
        }
    }
}

let name = TestEnum(rawValue: "Name")       //Name
let gender = TestEnum(rawValue: "Gender")   //Gender
Run Code Online (Sandbox Code Playgroud)

但似乎这rawValue对带空格的字符串不起作用:

let birth = TestEnum(rawValue: "Birth Day") //nil
Run Code Online (Sandbox Code Playgroud)

任何建议如何获得它?

enums ios swift

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

android ArrayAdapter项目更新

我有这个项目结构的ArrayAdapter:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ... >

         <TextView
             android:id="@+id/itemTextView"
             ... />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

并添加此适配器,以便:

mAdapter = new ArrayAdapter<String>(this, R.layout.item, 
                                            R.id.itemTextView, itemsText);
Run Code Online (Sandbox Code Playgroud)

一切都很好,但我想更新适配器项目中的文本.我找到了解决方案

mAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

但不明白如何使用它.请帮忙.

UPD 我的代码:

String[] itemsText = {"123", "345", "567"};
ArrayAdapter<String> mAdapter;
Run Code Online (Sandbox Code Playgroud)

的onCreate

mAdapter = new ArrayAdapter<String>(this, R.layout.roomitem, 
                                              R.id.itemTextView, itemsText);
setListAdapter(mAdapter);
itemsText = {"789", "910", "1011"};
Run Code Online (Sandbox Code Playgroud)

的onClick

mAdapter.notifyDataSetChanged();
//it's dont work
Run Code Online (Sandbox Code Playgroud)

android android-arrayadapter

16
推荐指数
3
解决办法
7万
查看次数

如何获得当前的画布?

我有DrawView.如果我触摸此视图,则会绘制小圆圈.我不会画圆圈但不会触摸视图 - 使用帮助功能"setPoints".我所做的:

package com.samples;
import ...

public class DrawView extends View {
    ArrayList<Point> points = new ArrayList<Point>();

    Paint paint = new Paint();

    private int pSize = 5;
    private int pColor = Color.BLACK;

    public DrawView(Context context, AttributeSet attrs) {

        super(context, attrs);

        setFocusable(true);
        setFocusableInTouchMode(true);

        this.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.setOnTouchListener(this);
                    Point point = new Point();
                    point.x = event.getX();
                    point.y = event.getY();
                    points.add(point); 
                    invalidate();
                }
                return true;
            }
        });
        requestFocus();
    }

    @Override
    public void onDraw(Canvas canvas) …
Run Code Online (Sandbox Code Playgroud)

android view android-canvas

14
推荐指数
1
解决办法
3万
查看次数

android socket DataOutputStream.writeUTF

我写套接字客户端:

clientSocket = new Socket("192.168.1.102", 15780);
outToServer = new DataOutputStream(clientSocket.getOutputStream());
Run Code Online (Sandbox Code Playgroud)

一切都有效.但我不会发送到服务器UTF -8格式的消息,并这样做:

outToServer.writeBytes("msg#");//server tag
outToServer.writeUTF("hello");
//outToServer.writeUTF(str); //or another string
outToServer.writeBytes("\n");
outToServer.flush();
Run Code Online (Sandbox Code Playgroud)

消息变成这样:

秘密字节

请告诉我为什么?如何正确发送UTF消息?

java sockets android

8
推荐指数
1
解决办法
6331
查看次数

libgdx particleEffect旋转

我用libgdx在我的android设备上画火:

ParticleEffect effect;
ParticleEffectPool fireEffectPool;
Array<PooledEffect> effects = new Array<PooledEffect>();

@Override
public void create() 
{
    ...
    effect = new ParticleEffect();
    effect.load(Gdx.files.internal("particles/fire01.p"), Gdx.files.internal("image"));
    effect.setFlip(true, false);
    fireEffectPool = new ParticleEffectPool(effect, 1000, 3000);

    PooledEffect myEffect = fireEffectPool.obtain();
    myEffect.setPosition(200, 400);
    effects.add(myEffect);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以通过编程方式旋转,设置速度或缩放效果吗?

android particle-system libgdx

6
推荐指数
2
解决办法
2903
查看次数

此Handler类应该是静态的,否则可能会发生泄漏

我有一个非常简单的代码:

package com.example.conn08;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class MainActivity extends Activity
{
    private static CustomHandler mHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        updateUI();
    }
    private class CustomHandler extends Handler
    {
        @Override  
        public void handleMessage(Message msg) 
        {  
            MainActivity.this.updateUI();  
        }  
        public void sleep(long delayMillis)
        {  
            this.removeMessages(0);  
            sendMessageDelayed(obtainMessage(0), delayMillis);  
        }  
    }
    private void updateUI()
    {
        mHandler.sleep(1000);
        Log.v("updateUI", "kokoko");
    }
}
Run Code Online (Sandbox Code Playgroud)

但在

MainActivity.this.updateUI();
Run Code Online (Sandbox Code Playgroud)

我知道了

此Handler类应该是静态的,否则可能会发生泄漏(com.example.conn08.MainActivity.CustomHandler)

为什么?请帮忙


编辑代码:

package com.example.conn08;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler; …
Run Code Online (Sandbox Code Playgroud)

android warnings handler

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

如何获得画布像素

我画了一条画线:

//see code upd
Run Code Online (Sandbox Code Playgroud)

我需要制作移液器工具,它将从我的画布中获取颜色.我该怎么做?


代码更新:

private static class DrawView extends View 
{
        ...
        public DrawView(Context context) {
            super(context);
            setFocusable(true);

            mBitmap = Bitmap.createBitmap(640, 860, Bitmap.Config.ARGB_8888);
            mCanvas = new Canvas(mBitmap);
            mPath = new Path();
            mBitmapPaint = new Paint(Paint.DITHER_FLAG);

            this.setDrawingCacheEnabled(true);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFFAAAAAA);
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            canvas.drawPath(mPath, mPaint);
        }
        private void touch_up()
        {
            if(!drBool) //is true when I click pipette button
            {
                ...
                mCanvas.drawPath(mPath, mPaint); // lines draw
                mPath.reset();
            }else{
                this.buildDrawingCache();
                cBitmap = this.getDrawingCache(true);
                if(cBitmap != …
Run Code Online (Sandbox Code Playgroud)

android colors android-canvas

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

C#:初始化时覆盖方法

在android java中,如果我想从非原始线程使用我的视图,我这样写:

Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        String text = (String) msg.obj;
        myTextView.setText(text);
    }
};
Run Code Online (Sandbox Code Playgroud)

一切正常.但在xamarin C#中我写道:

Handler h = new Handler()
{
    public override void HandleMessage (Message msg)
    {

    }
};
Run Code Online (Sandbox Code Playgroud)

并看到 invalid initializer member declarator

如何重装HandleMessage方法?我可以用其他方式从另一个线程中使用我的视图吗?


编辑:@AntP,这种方式在xamarin中不起作用:Only the original thread that created a view hierarchy can touch its views.但感谢您的支持.

解:

mActivity.RunOnUiThread(delegate
{
    mTextView.Text = ("Test");
});
Run Code Online (Sandbox Code Playgroud)

c# java android xamarin

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

是否可以在数组中存储具有相关值的枚举模式?

假设我们有简单的枚举消息类型:

enum MessageType {
    case audio
    case photo
    case text
}
Run Code Online (Sandbox Code Playgroud)

有一个Handler类只处理具有特定类型的消息:

class Handler {
    let allowed: [MessageType]

    init(_ allowed: [MessageType]) { self.allowed = allowed }

    func canHandle(_ messageType: MessageType) -> Bool {
        return allowed.contains(messageType)
    }
}
Run Code Online (Sandbox Code Playgroud)

基本用法示例:

let handler = Handler([.audio, .photo])
print(handler.canHandle(.text)) // Prints false
Run Code Online (Sandbox Code Playgroud)

我想升级我的MessageType并为某些消息类型添加相关值.

class Audio {}

enum MessageType {
    case audio(Audio)
    case photo
    case text
}
Run Code Online (Sandbox Code Playgroud)

问题是我无法将枚举的模式存储在allowed数组中以供将来检入canHandle:

// error: '_' can only appear in a pattern or …
Run Code Online (Sandbox Code Playgroud)

enums swift

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

Monodroid:执行完整的GC

我尝试创建我的小粒子系统.我有粒子列表的粒子管理器,并在画布上绘制我的粒子.我只在init()函数中创建了一些像Paint等新对象!如果粒径<0,我将其删除:

for (int particle = 0; particle < particles.Count; particle++)
    {
        particles[particle].Update(); //particle size--;
        if (!particles[particle].state) // size > 0 ? true : false
        {
            particles[particle] = null; 
            //here I tried all variations like 
            //((IDisposable)particles[particle]).Dispose();
            //GC.SuppressFinalize(particles[particle]); 
            //System.GC.ReRegisterForFinalize(particles[particle]);
            //((Java.Lang.Object)particles[particle]).Dispose(); and etc             

            particles.Remove(particles[particle]);
        }
Run Code Online (Sandbox Code Playgroud)

然后我创建新的粒子并将其添加到我的列表中.我在日志中看到的内容:

GC cleanup summary: 1063 objects tested - resurrecting 1002.
GC cleanup summary: 1053 objects tested - resurrecting 992.
...
GC cleanup summary: 1052 objects tested - resurrecting 988.
46800 outstanding GREFs. Performing a full GC!
Run Code Online (Sandbox Code Playgroud)

然后我在渲染线程中有10-15(!!!)秒暂停!我阅读官方文档,但它没有任何解决方案.我分析并比较了我的代码与单声道JetBoy示例,但JetBoy的日志没有关于GC的任何内容.虽然我用JetBoy的例子编写了我的程序.如何修复完整的GC问题?


编辑:MainThread.cs …

c# android garbage-collection xamarin.android

4
推荐指数
1
解决办法
1588
查看次数