2013-04-18 2 views
1

творю пользовательский интерфейс в классе View и я сделал RemoteViews в нем, но он теперь работаетRemoteViews теперь работает в классе View

View Class

public class CustomeView extends View { 

    Bitmap icon; 
    float left=0; 
    RemoteViews rs; 
    int width=0,height=0; 
    float def_value=0; 
    boolean unlock=false; 

    public CustomeView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     icon=BitmapFactory.decodeResource(getResources(), R.drawable.icon); 
     rs=new RemoteViews(context.getPackageName() ,R.layout.custom_ui); 

     WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 
     width = display.getWidth(); 
     height = display.getHeight(); 

     left=width/2; 
     def_value=left; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     Paint a=new Paint(); 
     a.setTextSize(10); 

     canvas.drawBitmap(icon, left, 0, null); 
     canvas.drawText(String.valueOf(unlock), 0, 110, a); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      setMeasuredDimension(width, height); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     // TODO Auto-generated method stub 
     if(event.getAction()==MotionEvent.ACTION_MOVE){ 
      left=event.getX()-(icon.getWidth()/2); 
      isUnlock(); 
     } 
     else if (event.getAction()==MotionEvent.ACTION_UP) { 
      if(def_value!=left){ 
       left=def_value; 
      } 
     } 
     invalidate(); 
     return true; 
    } 

    protected void isUnlock() { 
     if(left<=20){   
      unlock=true; 
      rs.setTextViewText(R.id.tvStatus, "True"); 
     } 
     if(left>=width-20){ 
      unlock=true; 
      rs.setTextViewText(R.id.tvStatus, "True"); 
     } 
    } 
} 

раскладку custom_ui.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.example.helloworl.CustomeView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" /> 

    <TextView 
     android:id="@+id/tvStatus" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="154dp" 
     android:text="False" /> 

</RelativeLayout> 

RemoteViews изменяет значение TextView в методе isUnlock, но он не работает. Пожалуйста, помогите мне решить эту проблему.

ответ

3

Вы не можете использовать пользовательские представления с RemoteViews, так как другой процесс не имеет доступа к вашему Java-коду.

+0

k thn wht я должен использовать для этого, я делаю блокировку экрана n, что объект растрового изображения перемещается влево и вправо, я хочу, чтобы этот растровый объект двигался влево и после достижения в какой-то момент его разблокировки экрана. так скажите мне, как я могу это решить? – user2290872

+0

@ user2290872: То, что вы хотите сделать, возможно, не входит в возможности виджета приложения вообще, не говоря уже о одном из блокировщиков Android 4.2+. При этом вам нужно придерживаться виджета пользовательского интерфейса, поддерживаемого виджетами приложений: http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout – CommonsWare

+0

, но я делаю блокировку экрана, предоставляя виджет. Я делаю блокировку экрана, поэтому, если у вас есть какая-либо идея, скажите мне – user2290872